#ifndef CEF_LIBCEF_BROWSER_OSR_SOFTWARE_OUTPUT_DEVICE_PROXY_H_ #define CEF_LIBCEF_BROWSER_OSR_SOFTWARE_OUTPUT_DEVICE_PROXY_H_ #include "base/memory/shared_memory_mapping.h" #include "base/threading/thread_checker.h" #include "components/viz/service/display/software_output_device.h" #include "components/viz/service/viz_service_export.h" #include "services/viz/privileged/interfaces/compositing/display_private.mojom.h" #include "services/viz/privileged/interfaces/compositing/layered_window_updater.mojom.h" namespace viz { // SoftwareOutputDevice implementation that draws indirectly. An // implementation of mojom::LayeredWindowUpdater in the browser process // handles the actual drawing. Pixel backing is in SharedMemory so no copying // between processes is required. class VIZ_SERVICE_EXPORT SoftwareOutputDeviceProxy : public SoftwareOutputDevice { public: explicit SoftwareOutputDeviceProxy( mojom::LayeredWindowUpdaterPtr layered_window_updater); ~SoftwareOutputDeviceProxy() override; // SoftwareOutputDevice implementation. void OnSwapBuffers(SwapBuffersCallback swap_ack_callback) override; // SoftwareOutputDeviceBase implementation. void Resize(const gfx::Size& viewport_pixel_size, float scale_factor) override; SkCanvas* BeginPaint(const gfx::Rect& damage_rect) override; void EndPaint() override; private: // Runs |swap_ack_callback_| after draw has happened. void DrawAck(); mojom::LayeredWindowUpdaterPtr layered_window_updater_; std::unique_ptr canvas_; bool waiting_on_draw_ack_ = false; bool in_paint_ = false; base::OnceClosure swap_ack_callback_; base::WritableSharedMemoryMapping shm_; THREAD_CHECKER(thread_checker_); DISALLOW_COPY_AND_ASSIGN(SoftwareOutputDeviceProxy); }; } // namespace viz #endif // CEF_LIBCEF_BROWSER_OSR_SOFTWARE_OUTPUT_DEVICE_PROXY_H_