gpu_memory_buffer_factory_android_hardware_buffer.h 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // Copyright 2017 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 GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_ANDROID_HARDWARE_BUFFER_H_
  5. #define GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_ANDROID_HARDWARE_BUFFER_H_
  6. #include <memory>
  7. #include <utility>
  8. #include "base/containers/flat_map.h"
  9. #include "base/synchronization/lock.h"
  10. #include "gpu/command_buffer/service/image_factory.h"
  11. #include "gpu/ipc/service/gpu_ipc_service_export.h"
  12. #include "gpu/ipc/service/gpu_memory_buffer_factory.h"
  13. namespace gl {
  14. class GLImage;
  15. }
  16. namespace gpu {
  17. class GpuMemoryBufferImplAndroidHardwareBuffer;
  18. class GPU_IPC_SERVICE_EXPORT GpuMemoryBufferFactoryAndroidHardwareBuffer
  19. : public GpuMemoryBufferFactory,
  20. public ImageFactory {
  21. public:
  22. GpuMemoryBufferFactoryAndroidHardwareBuffer();
  23. GpuMemoryBufferFactoryAndroidHardwareBuffer(
  24. const GpuMemoryBufferFactoryAndroidHardwareBuffer&) = delete;
  25. GpuMemoryBufferFactoryAndroidHardwareBuffer& operator=(
  26. const GpuMemoryBufferFactoryAndroidHardwareBuffer&) = delete;
  27. ~GpuMemoryBufferFactoryAndroidHardwareBuffer() override;
  28. // Overridden from GpuMemoryBufferFactory:
  29. gfx::GpuMemoryBufferHandle CreateGpuMemoryBuffer(
  30. gfx::GpuMemoryBufferId id,
  31. const gfx::Size& size,
  32. const gfx::Size& framebuffer_size,
  33. gfx::BufferFormat format,
  34. gfx::BufferUsage usage,
  35. int client_id,
  36. SurfaceHandle surface_handle) override;
  37. void DestroyGpuMemoryBuffer(gfx::GpuMemoryBufferId id,
  38. int client_id) override;
  39. bool FillSharedMemoryRegionWithBufferContents(
  40. gfx::GpuMemoryBufferHandle buffer_handle,
  41. base::UnsafeSharedMemoryRegion shared_memory) override;
  42. ImageFactory* AsImageFactory() override;
  43. // Overridden from ImageFactory:
  44. bool SupportsCreateAnonymousImage() const override;
  45. scoped_refptr<gl::GLImage> CreateAnonymousImage(const gfx::Size& size,
  46. gfx::BufferFormat format,
  47. gfx::BufferUsage usage,
  48. SurfaceHandle surface_handle,
  49. bool* is_cleared) override;
  50. scoped_refptr<gl::GLImage> CreateImageForGpuMemoryBuffer(
  51. gfx::GpuMemoryBufferHandle handle,
  52. const gfx::Size& size,
  53. gfx::BufferFormat format,
  54. const gfx::ColorSpace& color_space,
  55. gfx::BufferPlane plane,
  56. int client_id,
  57. SurfaceHandle surface_handle) override;
  58. unsigned RequiredTextureType() override;
  59. private:
  60. using BufferMapKey = std::pair<gfx::GpuMemoryBufferId, int>;
  61. using BufferMap =
  62. base::flat_map<BufferMapKey,
  63. std::unique_ptr<GpuMemoryBufferImplAndroidHardwareBuffer>>;
  64. base::Lock lock_;
  65. BufferMap buffer_map_ GUARDED_BY(lock_);
  66. };
  67. } // namespace gpu
  68. #endif // GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_ANDROID_HARDWARE_BUFFER_H_