// Copyright 2020 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_REPORTING_RESOURCES_RESOURCE_MANAGER_H_ #define COMPONENTS_REPORTING_RESOURCES_RESOURCE_MANAGER_H_ #include <atomic> #include <cstdint> #include <optional> #include <queue> #include <utility> #include "base/functional/callback_forward.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_refptr.h" #include "base/task/sequenced_task_runner.h" #include "base/thread_annotations.h" namespace reporting { // Resource management class. The class is thread-safe. // Each resource instance is created with its own total size; the rest of the // functionality is identical. All APIs are non-blocking. class ResourceManager : public base::RefCountedThreadSafe<ResourceManager> { … }; // Moveable RAII class used for scoped Reserve-Discard. // // Usage: // { // ScopedReservation reservation(1024u, options.memory_resource()); // if (!reservation.reserved()) { // // Allocation failed. // return; // } // // Allocation succeeded. // ... // } // Automatically discarded. // // Can be handed over to another owner by move-constructor or using HandOver // method: // { // ScopedReservation summary; // for (const uint64_t size : sizes) { // ScopedReservation single_reservation(size, resource); // ... // summary.HandOver(single_reservation); // } // } class ScopedReservation { … }; } // namespace reporting #endif // COMPONENTS_REPORTING_RESOURCES_RESOURCE_MANAGER_H_