1 // Copyright 2014 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 5 #ifndef UI_COMPOSITOR_TEST_IN_PROCESS_CONTEXT_FACTORY_H_ 6 #define UI_COMPOSITOR_TEST_IN_PROCESS_CONTEXT_FACTORY_H_ 7 8 #include <stdint.h> 9 #include <memory> 10 #include <unordered_map> 11 12 #include "base/macros.h" 13 #include "cc/test/test_task_graph_runner.h" 14 #include "components/viz/common/surfaces/frame_sink_id_allocator.h" 15 #include "components/viz/service/display/display.h" 16 #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" 17 #include "components/viz/test/test_gpu_memory_buffer_manager.h" 18 #include "components/viz/test/test_image_factory.h" 19 #include "components/viz/test/test_shared_bitmap_manager.h" 20 #include "gpu/ipc/common/surface_handle.h" 21 #include "mojo/public/cpp/bindings/pending_remote.h" 22 #include "services/viz/privileged/mojom/compositing/vsync_parameter_observer.mojom.h" 23 #include "ui/compositor/compositor.h" 24 25 namespace viz { 26 class HostFrameSinkManager; 27 } 28 29 namespace ui { 30 class InProcessContextProvider; 31 32 class InProcessContextFactory : public ContextFactory { 33 public: 34 // Both |host_frame_sink_manager| and |frame_sink_manager| must outlive the 35 // ContextFactory. The constructor without |use_skia_renderer| will use 36 // SkiaRenderer if the feature is enabled. 37 // TODO(crbug.com/657959): |frame_sink_manager| should go away and we should 38 // use the LayerTreeFrameSink from the HostFrameSinkManager. 39 InProcessContextFactory(viz::HostFrameSinkManager* host_frame_sink_manager, 40 viz::FrameSinkManagerImpl* frame_sink_manager); 41 InProcessContextFactory(viz::HostFrameSinkManager* host_frame_sink_manager, 42 viz::FrameSinkManagerImpl* frame_sink_manager, 43 bool use_skia_renderer); 44 ~InProcessContextFactory() override; 45 GetFrameSinkManager()46 viz::FrameSinkManagerImpl* GetFrameSinkManager() { 47 return frame_sink_manager_; 48 } 49 50 // If true (the default) an OutputSurface is created that does not display 51 // anything. Set to false if you want to see results on the screen. set_use_test_surface(bool use_test_surface)52 void set_use_test_surface(bool use_test_surface) { 53 use_test_surface_ = use_test_surface; 54 } 55 56 // Set refresh rate will be set to 200 to spend less time waiting for 57 // BeginFrame when used for tests. 58 void SetUseFastRefreshRateForTests(); 59 60 // ContextFactory implementation. 61 void CreateLayerTreeFrameSink(base::WeakPtr<Compositor> compositor) override; 62 63 scoped_refptr<viz::ContextProvider> SharedMainThreadContextProvider() 64 override; 65 scoped_refptr<viz::RasterContextProvider> 66 SharedMainThreadRasterContextProvider() override; 67 68 void RemoveCompositor(Compositor* compositor) override; 69 gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override; 70 cc::TaskGraphRunner* GetTaskGraphRunner() override; 71 viz::FrameSinkId AllocateFrameSinkId() override; 72 viz::HostFrameSinkManager* GetHostFrameSinkManager() override; 73 74 SkMatrix44 GetOutputColorMatrix(Compositor* compositor) const; 75 gfx::DisplayColorSpaces GetDisplayColorSpaces(Compositor* compositor) const; 76 float GetSDRWhiteLevel(Compositor* compositor) const; 77 base::TimeTicks GetDisplayVSyncTimeBase(Compositor* compositor) const; 78 base::TimeDelta GetDisplayVSyncTimeInterval(Compositor* compositor) const; 79 void ResetDisplayOutputParameters(Compositor* compositor); 80 81 private: 82 class PerCompositorData; 83 84 PerCompositorData* CreatePerCompositorData(Compositor* compositor); 85 86 scoped_refptr<InProcessContextProvider> shared_main_thread_contexts_; 87 scoped_refptr<InProcessContextProvider> shared_worker_context_provider_; 88 viz::TestSharedBitmapManager shared_bitmap_manager_; 89 viz::TestGpuMemoryBufferManager gpu_memory_buffer_manager_; 90 viz::TestImageFactory image_factory_; 91 cc::TestTaskGraphRunner task_graph_runner_; 92 viz::FrameSinkIdAllocator frame_sink_id_allocator_; 93 bool use_test_surface_; 94 bool disable_vsync_ = false; 95 double refresh_rate_ = 60.0; 96 viz::HostFrameSinkManager* const host_frame_sink_manager_; 97 viz::FrameSinkManagerImpl* const frame_sink_manager_; 98 99 viz::RendererSettings renderer_settings_; 100 viz::DebugRendererSettings debug_settings_; 101 using PerCompositorDataMap = 102 std::unordered_map<Compositor*, std::unique_ptr<PerCompositorData>>; 103 PerCompositorDataMap per_compositor_data_; 104 105 DISALLOW_COPY_AND_ASSIGN(InProcessContextFactory); 106 }; 107 108 } // namespace ui 109 110 #endif // UI_COMPOSITOR_TEST_IN_PROCESS_CONTEXT_FACTORY_H_ 111