synchronous_compositor_impl.h revision 868fa2fe829687343ffae624259930155e16dbd8
1// Copyright 2013 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 CONTENT_BROWSER_ANDROID_IN_PROCESS_SYNCHRONOUS_COMPOSITOR_IMPL_H_
6#define CONTENT_BROWSER_ANDROID_IN_PROCESS_SYNCHRONOUS_COMPOSITOR_IMPL_H_
7
8#include "base/basictypes.h"
9#include "base/compiler_specific.h"
10#include "base/memory/scoped_ptr.h"
11#include "content/browser/android/in_process/synchronous_compositor_output_surface.h"
12#include "content/port/common/input_event_ack_state.h"
13#include "content/public/browser/android/synchronous_compositor.h"
14#include "content/public/browser/web_contents_user_data.h"
15
16namespace WebKit {
17class WebInputEvent;
18}
19
20namespace content {
21
22// The purpose of this class is to act as the intermediary between the various
23// components that make up the 'synchronous compositor mode' implementation and
24// expose their functionality via the SynchronousCompositor interface.
25// This class is created on the main thread but most of the APIs are called
26// from the Compositor thread.
27class SynchronousCompositorImpl
28    : public SynchronousCompositor,
29      public SynchronousCompositorOutputSurfaceDelegate,
30      public WebContentsUserData<SynchronousCompositorImpl> {
31 public:
32  // When used from browser code, use both |process_id| and |routing_id|.
33  static SynchronousCompositorImpl* FromID(int process_id, int routing_id);
34  // When handling upcalls from renderer code, use this version; the process id
35  // is implicitly that of the in-process renderer.
36  static SynchronousCompositorImpl* FromRoutingID(int routing_id);
37
38  InputEventAckState HandleInputEvent(const WebKit::WebInputEvent& input_event);
39
40  // SynchronousCompositor
41  virtual void SetClient(SynchronousCompositorClient* compositor_client)
42      OVERRIDE;
43  virtual bool InitializeHwDraw() OVERRIDE;
44  virtual bool DemandDrawHw(
45      gfx::Size view_size,
46      const gfx::Transform& transform,
47      gfx::Rect clip) OVERRIDE;
48  virtual bool DemandDrawSw(SkCanvas* canvas) OVERRIDE;
49
50  // SynchronousCompositorOutputSurfaceDelegate
51  virtual void DidBindOutputSurface(
52      SynchronousCompositorOutputSurface* output_surface) OVERRIDE;
53  virtual void DidDestroySynchronousOutputSurface(
54      SynchronousCompositorOutputSurface* output_surface) OVERRIDE;
55  virtual void SetContinuousInvalidate(bool enable) OVERRIDE;
56
57 private:
58  explicit SynchronousCompositorImpl(WebContents* contents);
59  virtual ~SynchronousCompositorImpl();
60  friend class WebContentsUserData<SynchronousCompositorImpl>;
61
62  void DidCreateSynchronousOutputSurface(
63      SynchronousCompositorOutputSurface* output_surface);
64  bool CalledOnValidThread() const;
65
66  SynchronousCompositorClient* compositor_client_;
67  SynchronousCompositorOutputSurface* output_surface_;
68  WebContents* contents_;
69
70  DISALLOW_COPY_AND_ASSIGN(SynchronousCompositorImpl);
71};
72
73}  // namespace content
74
75#endif  // CONTENT_BROWSER_ANDROID_IN_PROCESS_SYNCHRONOUS_COMPOSITOR_IMPL_H_
76