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