| Index: cc/trees/layer_tree_host.h
 | 
| diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h
 | 
| index 91425f4c786a489b63b4bc2eb7f5cbf346d9a18c..3fe2abaefb59c688003862bf8e755785c0c64ae6 100644
 | 
| --- a/cc/trees/layer_tree_host.h
 | 
| +++ b/cc/trees/layer_tree_host.h
 | 
| @@ -39,6 +39,7 @@
 | 
|  #include "cc/trees/compositor_mode.h"
 | 
|  #include "cc/trees/layer_tree.h"
 | 
|  #include "cc/trees/layer_tree_host_client.h"
 | 
| +#include "cc/trees/layer_tree_host_interface.h"
 | 
|  #include "cc/trees/layer_tree_settings.h"
 | 
|  #include "cc/trees/proxy.h"
 | 
|  #include "cc/trees/swap_promise_monitor.h"
 | 
| @@ -81,7 +82,20 @@ namespace proto {
 | 
|  class LayerTreeHost;
 | 
|  }
 | 
|  
 | 
| -class CC_EXPORT LayerTreeHost {
 | 
| +// This class is being refactored to an interface, see LayerTreeHostInterface,
 | 
| +// which is the API for the cc embedder. When adding new code to this class,
 | 
| +// consider the following:
 | 
| +// 1) If its state/data that gets pushed to the LayerTreeImpl during commit, add
 | 
| +//    it to the LayerTree.
 | 
| +// 2) If it's a call from the embedder, add it to the LayerTreeHostInterface.
 | 
| +// 3) If it's a call from any of the internal cc classes, i.e., LayerTree or
 | 
| +//    PropertyTreeBuilder, etc., add it to the LayerTreeHostInterface.
 | 
| +// 4) If it's a notification from the impl thread or a call from Proxy, add it
 | 
| +//    to this class.
 | 
| +// This class will be renamed to LayerTreeHostInProcess and will be the
 | 
| +// LayerTreeHost implementation for when the impl thread for the compositor runs
 | 
| +// in the same process, and thus uses a Proxy.
 | 
| +class CC_EXPORT LayerTreeHost : public LayerTreeHostInterface {
 | 
|   public:
 | 
|    // TODO(sad): InitParams should be a movable type so that it can be
 | 
|    // std::move()d to the Create* functions.
 | 
| @@ -101,7 +115,7 @@ class CC_EXPORT LayerTreeHost {
 | 
|    };
 | 
|  
 | 
|    // The SharedBitmapManager will be used on the compositor thread.
 | 
| -  static std::unique_ptr<LayerTreeHost> CreateThreaded(
 | 
| +  static std::unique_ptr<LayerTreeHostInterface> CreateThreaded(
 | 
|        scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner,
 | 
|        InitParams* params);
 | 
|  
 | 
| @@ -109,7 +123,7 @@ class CC_EXPORT LayerTreeHost {
 | 
|        LayerTreeHostSingleThreadClient* single_thread_client,
 | 
|        InitParams* params);
 | 
|  
 | 
| -  static std::unique_ptr<LayerTreeHost> CreateRemoteServer(
 | 
| +  static std::unique_ptr<LayerTreeHostInterface> CreateRemoteServer(
 | 
|        RemoteProtoChannel* remote_proto_channel,
 | 
|        InitParams* params);
 | 
|  
 | 
| @@ -119,12 +133,55 @@ class CC_EXPORT LayerTreeHost {
 | 
|    // a CompositorMessageToImpl::CloseImpl message from the server. This ensures
 | 
|    // that the client will not send any compositor messages once the
 | 
|    // LayerTreeHost on the server is destroyed.
 | 
| -  static std::unique_ptr<LayerTreeHost> CreateRemoteClient(
 | 
| +  static std::unique_ptr<LayerTreeHostInterface> CreateRemoteClient(
 | 
|        RemoteProtoChannel* remote_proto_channel,
 | 
|        scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner,
 | 
|        InitParams* params);
 | 
|  
 | 
| -  virtual ~LayerTreeHost();
 | 
| +  ~LayerTreeHost() override;
 | 
| +
 | 
| +  // LayerTreeHostInterface implementation.
 | 
| +  int GetId() const override;
 | 
| +  int SourceFrameNumber() const override;
 | 
| +  LayerTree* GetLayerTree() override;
 | 
| +  const LayerTree* GetLayerTree() const override;
 | 
| +  TaskRunnerProvider* GetTaskRunnerProvider() const override;
 | 
| +  const LayerTreeSettings& GetSettings() const override;
 | 
| +  void SetSurfaceClientId(uint32_t client_id) override;
 | 
| +  void SetLayerTreeMutator(std::unique_ptr<LayerTreeMutator> mutator) override;
 | 
| +  void QueueSwapPromise(std::unique_ptr<SwapPromise> swap_promise) override;
 | 
| +  void SetHasGpuRasterizationTrigger(bool has_trigger) override;
 | 
| +  void SetVisible(bool visible) override;
 | 
| +  bool IsVisible() const override;
 | 
| +  void SetOutputSurface(std::unique_ptr<OutputSurface> output_surface) override;
 | 
| +  std::unique_ptr<OutputSurface> ReleaseOutputSurface() override;
 | 
| +  void SetNeedsAnimate() override;
 | 
| +  void SetNeedsUpdateLayers() override;
 | 
| +  void SetNeedsCommit() override;
 | 
| +  bool BeginMainFrameRequested() const override;
 | 
| +  bool CommitRequested() const override;
 | 
| +  void SetDeferCommits(bool defer_commits) override;
 | 
| +  void LayoutAndUpdateLayers() override;
 | 
| +  void Composite(base::TimeTicks frame_begin_time) override;
 | 
| +  void SetNeedsRedraw() override;
 | 
| +  void SetNeedsRedrawRect(const gfx::Rect& damage_rect) override;
 | 
| +  void SetNextCommitForcesRedraw() override;
 | 
| +  void NotifyInputThrottledUntilCommit() override;
 | 
| +  void UpdateTopControlsState(TopControlsState constraints,
 | 
| +                              TopControlsState current,
 | 
| +                              bool animate) override;
 | 
| +  const base::WeakPtr<InputHandler>& GetInputHandler() const override;
 | 
| +  void DidStopFlinging() override;
 | 
| +  void SetDebugState(const LayerTreeDebugState& debug_state) override;
 | 
| +  const LayerTreeDebugState& GetDebugState() const override;
 | 
| +  int ScheduleMicroBenchmark(
 | 
| +      const std::string& benchmark_name,
 | 
| +      std::unique_ptr<base::Value> value,
 | 
| +      const MicroBenchmark::DoneCallback& callback) override;
 | 
| +  bool SendMessageToMicroBenchmark(int id,
 | 
| +                                   std::unique_ptr<base::Value> value) override;
 | 
| +  void InsertSwapPromiseMonitor(SwapPromiseMonitor* monitor) override;
 | 
| +  void RemoveSwapPromiseMonitor(SwapPromiseMonitor* monitor) override;
 | 
|  
 | 
|    // LayerTreeHost interface to Proxy.
 | 
|    void WillBeginMainFrame();
 | 
| @@ -132,13 +189,10 @@ class CC_EXPORT LayerTreeHost {
 | 
|    void BeginMainFrame(const BeginFrameArgs& args);
 | 
|    void BeginMainFrameNotExpectedSoon();
 | 
|    void AnimateLayers(base::TimeTicks monotonic_frame_begin_time);
 | 
| -  void DidStopFlinging();
 | 
|    void RequestMainFrameUpdate();
 | 
|    void FinishCommitOnImplThread(LayerTreeHostImpl* host_impl);
 | 
|    void WillCommit();
 | 
|    void CommitComplete();
 | 
| -  void SetOutputSurface(std::unique_ptr<OutputSurface> output_surface);
 | 
| -  std::unique_ptr<OutputSurface> ReleaseOutputSurface();
 | 
|    void RequestNewOutputSurface();
 | 
|    void DidInitializeOutputSurface();
 | 
|    void DidFailToInitializeOutputSurface();
 | 
| @@ -150,20 +204,9 @@ class CC_EXPORT LayerTreeHost {
 | 
|    bool UpdateLayers();
 | 
|    // Called when the compositor completed page scale animation.
 | 
|    void DidCompletePageScaleAnimation();
 | 
| +  void ApplyScrollAndScale(ScrollAndScaleSet* info);
 | 
|  
 | 
|    LayerTreeHostClient* client() { return client_; }
 | 
| -  const base::WeakPtr<InputHandler>& GetInputHandler() {
 | 
| -    return input_handler_weak_ptr_;
 | 
| -  }
 | 
| -
 | 
| -  void NotifyInputThrottledUntilCommit();
 | 
| -
 | 
| -  void LayoutAndUpdateLayers();
 | 
| -  void Composite(base::TimeTicks frame_begin_time);
 | 
| -
 | 
| -  void SetDeferCommits(bool defer_commits);
 | 
| -
 | 
| -  int source_frame_number() const { return source_frame_number_; }
 | 
|  
 | 
|    bool gpu_rasterization_histogram_recorded() const {
 | 
|      return gpu_rasterization_histogram_recorded_;
 | 
| @@ -175,46 +218,15 @@ class CC_EXPORT LayerTreeHost {
 | 
|      return rendering_stats_instrumentation_.get();
 | 
|    }
 | 
|  
 | 
| -  void SetNeedsAnimate();
 | 
| -  virtual void SetNeedsUpdateLayers();
 | 
| -  virtual void SetNeedsCommit();
 | 
| -  void SetNeedsRedraw();
 | 
| -  void SetNeedsRedrawRect(const gfx::Rect& damage_rect);
 | 
| -  bool CommitRequested() const;
 | 
| -  bool BeginMainFrameRequested() const;
 | 
| -
 | 
|    void SetNextCommitWaitsForActivation();
 | 
|  
 | 
| -  void SetNextCommitForcesRedraw();
 | 
| -
 | 
|    void SetAnimationEvents(std::unique_ptr<AnimationEvents> events);
 | 
|  
 | 
| -  const LayerTreeSettings& settings() const { return settings_; }
 | 
| -
 | 
| -  void SetDebugState(const LayerTreeDebugState& debug_state);
 | 
| -  const LayerTreeDebugState& debug_state() const { return debug_state_; }
 | 
| -
 | 
|    bool has_gpu_rasterization_trigger() const {
 | 
|      return has_gpu_rasterization_trigger_;
 | 
|    }
 | 
| -  void SetHasGpuRasterizationTrigger(bool has_trigger);
 | 
| -
 | 
| -  void ApplyPageScaleDeltaFromImplSide(float page_scale_delta);
 | 
| -
 | 
| -  void SetVisible(bool visible);
 | 
| -  bool visible() const { return visible_; }
 | 
| -
 | 
| -  void ApplyScrollAndScale(ScrollAndScaleSet* info);
 | 
| -
 | 
| -  void UpdateTopControlsState(TopControlsState constraints,
 | 
| -                              TopControlsState current,
 | 
| -                              bool animate);
 | 
|  
 | 
|    Proxy* proxy() const { return proxy_.get(); }
 | 
| -  TaskRunnerProvider* task_runner_provider() const {
 | 
| -    return task_runner_provider_.get();
 | 
| -  }
 | 
| -  AnimationHost* animation_host() const;
 | 
|  
 | 
|    // CreateUIResource creates a resource given a bitmap.  The bitmap is
 | 
|    // generated via an interface function, which is called when initializing the
 | 
| @@ -231,35 +243,13 @@ class CC_EXPORT LayerTreeHost {
 | 
|  
 | 
|    virtual gfx::Size GetUIResourceSize(UIResourceId id) const;
 | 
|  
 | 
| -  int id() const { return id_; }
 | 
| -
 | 
| -  // Returns the id of the benchmark on success, 0 otherwise.
 | 
| -  int ScheduleMicroBenchmark(const std::string& benchmark_name,
 | 
| -                             std::unique_ptr<base::Value> value,
 | 
| -                             const MicroBenchmark::DoneCallback& callback);
 | 
| -  // Returns true if the message was successfully delivered and handled.
 | 
| -  bool SendMessageToMicroBenchmark(int id, std::unique_ptr<base::Value> value);
 | 
| -
 | 
| -  // When a SwapPromiseMonitor is created on the main thread, it calls
 | 
| -  // InsertSwapPromiseMonitor() to register itself with LayerTreeHost.
 | 
| -  // When the monitor is destroyed, it calls RemoveSwapPromiseMonitor()
 | 
| -  // to unregister itself.
 | 
| -  void InsertSwapPromiseMonitor(SwapPromiseMonitor* monitor);
 | 
| -  void RemoveSwapPromiseMonitor(SwapPromiseMonitor* monitor);
 | 
| -
 | 
| -  // Call this function when you expect there to be a swap buffer.
 | 
| -  // See swap_promise.h for how to use SwapPromise.
 | 
| -  void QueueSwapPromise(std::unique_ptr<SwapPromise> swap_promise);
 | 
|    void BreakSwapPromises(SwapPromise::DidNotSwapReason reason);
 | 
|    std::vector<std::unique_ptr<SwapPromise>> TakeSwapPromises();
 | 
|  
 | 
|    size_t num_queued_swap_promises() const { return swap_promise_list_.size(); }
 | 
|  
 | 
| -  void set_surface_client_id(uint32_t client_id);
 | 
|    SurfaceSequence CreateSurfaceSequence();
 | 
|  
 | 
| -  void SetLayerTreeMutator(std::unique_ptr<LayerTreeMutator> mutator);
 | 
| -
 | 
|    // Serializes the parts of this LayerTreeHost that is needed for a commit to a
 | 
|    // protobuf message. Not all members are serialized as they are not helpful
 | 
|    // for remote usage.
 | 
| @@ -292,9 +282,6 @@ class CC_EXPORT LayerTreeHost {
 | 
|      return client_picture_cache_ ? client_picture_cache_.get() : nullptr;
 | 
|    }
 | 
|  
 | 
| -  LayerTree* GetLayerTree() { return layer_tree_.get(); }
 | 
| -  const LayerTree* GetLayerTree() const { return layer_tree_.get(); }
 | 
| -
 | 
|    void ResetGpuRasterizationTracking();
 | 
|  
 | 
|   protected:
 | 
| @@ -356,6 +343,7 @@ class CC_EXPORT LayerTreeHost {
 | 
|    enum { kNumFramesToConsiderBeforeGpuRasterization = 60 };
 | 
|  
 | 
|    void ApplyViewportDeltas(ScrollAndScaleSet* info);
 | 
| +  void ApplyPageScaleDeltaFromImplSide(float page_scale_delta);
 | 
|    void InitializeProxy(
 | 
|        std::unique_ptr<Proxy> proxy,
 | 
|        std::unique_ptr<BeginFrameSource> external_begin_frame_source);
 | 
| 
 |