1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// found in the LICENSE file. 4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#ifndef CONTENT_BROWSER_ANDROID_IN_PROCESS_SYNCHRONOUS_COMPOSITOR_IMPL_H_ 6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define CONTENT_BROWSER_ANDROID_IN_PROCESS_SYNCHRONOUS_COMPOSITOR_IMPL_H_ 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/basictypes.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/compiler_specific.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "cc/input/layer_scroll_offset_delegate.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/browser/android/in_process/synchronous_compositor_output_surface.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/port/common/input_event_ack_state.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/public/browser/android/synchronous_compositor.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/public/browser/web_contents_user_data.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace cc { 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class InputHandler; 199ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochstruct DidOverscrollParams; 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class WebInputEvent; 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace content { 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class InputHandlerManager; 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// The purpose of this class is to act as the intermediary between the various 30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// components that make up the 'synchronous compositor mode' implementation and 31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// expose their functionality via the SynchronousCompositor interface. 32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// This class is created on the main thread but most of the APIs are called 33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// from the Compositor thread. 34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class SynchronousCompositorImpl 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : public cc::LayerScrollOffsetDelegate, 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public SynchronousCompositor, 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public SynchronousCompositorOutputSurfaceDelegate, 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public WebContentsUserData<SynchronousCompositorImpl> { 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public: 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // When used from browser code, use both |process_id| and |routing_id|. 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) static SynchronousCompositorImpl* FromID(int process_id, int routing_id); 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // When handling upcalls from renderer code, use this version; the process id 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // is implicitly that of the in-process renderer. 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) static SynchronousCompositorImpl* FromRoutingID(int routing_id); 45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InputEventAckState HandleInputEvent(const blink::WebInputEvent& input_event); 47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // SynchronousCompositor 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void SetClient(SynchronousCompositorClient* compositor_client) 50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) OVERRIDE; 51bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch virtual bool InitializeHwDraw( 52bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch scoped_refptr<gfx::GLSurface> surface) OVERRIDE; 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void ReleaseHwDraw() OVERRIDE; 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual bool DemandDrawHw( 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gfx::Size surface_size, 56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const gfx::Transform& transform, 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gfx::Rect viewport, 58fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch gfx::Rect clip, 59fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch bool stencil_enabled) OVERRIDE; 60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual bool DemandDrawSw(SkCanvas* canvas) OVERRIDE; 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void SetMemoryPolicy( 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const SynchronousCompositorMemoryPolicy& policy) OVERRIDE; 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void DidChangeRootLayerScrollOffset() OVERRIDE; 64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // SynchronousCompositorOutputSurfaceDelegate 66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void DidBindOutputSurface( 67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SynchronousCompositorOutputSurface* output_surface) OVERRIDE; 68868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void DidDestroySynchronousOutputSurface( 69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SynchronousCompositorOutputSurface* output_surface) OVERRIDE; 70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void SetContinuousInvalidate(bool enable) OVERRIDE; 715e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) virtual void UpdateFrameMetaData( 725e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) const cc::CompositorFrameMetadata& frame_info) OVERRIDE; 73ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void DidActivatePendingTree() OVERRIDE; 74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // LayerScrollOffsetDelegate 7668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void SetMaxScrollOffset(gfx::Vector2dF max_scroll_offset) OVERRIDE; 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void SetTotalScrollOffset(gfx::Vector2dF new_value) OVERRIDE; 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual gfx::Vector2dF GetTotalScrollOffset() OVERRIDE; 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual bool IsExternalFlingActive() const OVERRIDE; 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void SetTotalPageScaleFactor(float page_scale_factor) OVERRIDE; 8168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void SetScrollableSize(gfx::SizeF scrollable_size) OVERRIDE; 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void SetInputHandler(cc::InputHandler* input_handler); 849ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch void DidOverscroll(const cc::DidOverscrollParams& params); 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private: 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) explicit SynchronousCompositorImpl(WebContents* contents); 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual ~SynchronousCompositorImpl(); 89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) friend class WebContentsUserData<SynchronousCompositorImpl>; 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void DidCreateSynchronousOutputSurface( 92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SynchronousCompositorOutputSurface* output_surface); 93868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool CalledOnValidThread() const; 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SynchronousCompositorClient* compositor_client_; 96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SynchronousCompositorOutputSurface* output_surface_; 97868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebContents* contents_; 987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) cc::InputHandler* input_handler_; 99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SynchronousCompositorImpl); 101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 103868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace content 104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif // CONTENT_BROWSER_ANDROID_IN_PROCESS_SYNCHRONOUS_COMPOSITOR_IMPL_H_ 106