frame_sink_resource_manager.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef COMPONENTS_EXO_FRAME_SINK_RESOURCE_MANAGER_H_
  5. #define COMPONENTS_EXO_FRAME_SINK_RESOURCE_MANAGER_H_
  6. #include "base/containers/flat_map.h"
  7. #include "components/viz/common/resources/release_callback.h"
  8. #include "components/viz/common/resources/resource_id.h"
  9. #include "components/viz/common/resources/returned_resource.h"
  10. namespace exo {
  11. // This class manages the resource IDs and active resource callbacks suitable
  12. // for implementing a frame sink.
  13. class FrameSinkResourceManager {
  14. public:
  15. using ReleaseCallback = base::OnceCallback<void(viz::ReturnedResource)>;
  16. FrameSinkResourceManager();
  17. FrameSinkResourceManager(const FrameSinkResourceManager&) = delete;
  18. FrameSinkResourceManager& operator=(const FrameSinkResourceManager&) = delete;
  19. ~FrameSinkResourceManager();
  20. bool HasReleaseCallbackForResource(viz::ResourceId id);
  21. void SetResourceReleaseCallback(viz::ResourceId id, ReleaseCallback callback);
  22. viz::ResourceId AllocateResourceId();
  23. bool HasNoCallbacks() const;
  24. void ReclaimResource(viz::ReturnedResource resource);
  25. void ClearAllCallbacks();
  26. private:
  27. // A collection of callbacks used to release resources.
  28. using ResourceReleaseCallbackMap =
  29. base::flat_map<viz::ResourceId, ReleaseCallback>;
  30. ResourceReleaseCallbackMap release_callbacks_;
  31. // The id generator for the buffer.
  32. viz::ResourceIdGenerator id_generator_;
  33. };
  34. } // namespace exo
  35. #endif // COMPONENTS_EXO_FRAME_SINK_RESOURCE_MANAGER_H_