synchronous_compositor.h revision 868fa2fe829687343ffae624259930155e16dbd8
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Copyright 2013 The Chromium Authors. All rights reserved. 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Use of this source code is governed by a BSD-style license that can be 383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius// found in the LICENSE file. 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef CONTENT_PUBLIC_BROWSER_ANDROID_SYNCHRONOUS_COMPOSITOR_H_ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CONTENT_PUBLIC_BROWSER_ANDROID_SYNCHRONOUS_COMPOSITOR_H_ 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ui/gfx/rect.h" 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ui/gfx/size.h" 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass SkCanvas; 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querunamespace gfx { 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass Transform; 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querunamespace content { 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass WebContents; 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass SynchronousCompositorClient; 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Interface for embedders that wish to direct compositing operations 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// synchronously under their own control. Only meaningful when the 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// kEnableSyncrhonousRendererCompositor flag is specified. 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass SynchronousCompositor { 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru public: 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Must be called once per WebContents instance. Will create the compositor 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // instance as needed, but only if |client| is non-NULL. 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static void SetClientForWebContents(WebContents* contents, 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SynchronousCompositorClient* client); 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Allows changing or resetting the client to NULL (this must be used if 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // the client is being deleted prior to the DidDestroyCompositor() call 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // being received by the client). Ownership of |client| remains with 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // the caller. 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void SetClient(SynchronousCompositorClient* client) = 0; 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // One-time synchronously initialize compositor for hardware draw. 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // It is invalid to DemandDrawHw before this returns true. 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual bool InitializeHwDraw() = 0; 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "On demand" hardware draw. The content is first clipped to |damage_area|, 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // then transformed through |transform|, and finally clipped to |view_size|. 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual bool DemandDrawHw( 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gfx::Size view_size, 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const gfx::Transform& transform, 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gfx::Rect damage_area) = 0; 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "On demand" SW draw, into the supplied canvas (observing the transform 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // and clip set there-in). 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual bool DemandDrawSw(SkCanvas* canvas) = 0; 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru protected: 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual ~SynchronousCompositor() {} 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} // namespace content 59b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 60b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif // CONTENT_PUBLIC_BROWSER_ANDROID_SYNCHRONOUS_COMPOSITOR_H_ 61b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru