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