12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2010 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CC_LAYERS_LAYER_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_LAYERS_LAYER_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include <set>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/callback.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/observer_list.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/layer_animation_controller.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/layer_animation_value_observer.h"
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "cc/animation/layer_animation_value_provider.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/cc_export.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/region.h"
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "cc/base/scoped_ptr_vector.h"
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/debug/micro_benchmark.h"
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "cc/layers/compositing_reasons.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/draw_properties.h"
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/layers/layer_lists.h"
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/layers/layer_position_constraint.h"
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/layers/paint_properties.h"
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/render_surface.h"
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "cc/output/filter_operations.h"
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/trees/occlusion_tracker.h"
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "skia/ext/refptr.h"
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkColor.h"
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkImageFilter.h"
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "third_party/skia/include/core/SkPicture.h"
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "third_party/skia/include/core/SkXfermode.h"
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect.h"
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect_f.h"
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/transform.h"
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace gfx {
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class BoxF;
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace base {
43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace debug {
44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class ConvertableToTraceFormat;
45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Animation;
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass AnimationDelegate;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct AnimationEvent;
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class CopyOutputRequest;
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerAnimationDelegate;
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class LayerAnimationEventObserver;
563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class LayerClient;
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerImpl;
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeHost;
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeImpl;
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PriorityCalculator;
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class RenderingStatsInstrumentation;
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ResourceUpdateQueue;
6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class ScrollbarLayerInterface;
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct AnimationEvent;
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Base class for composited layers. Special layer types are derived from
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// this class.
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT Layer : public base::RefCounted<Layer>,
69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                        public LayerAnimationValueObserver,
70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                        public LayerAnimationValueProvider {
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  typedef RenderSurfaceLayerList RenderSurfaceListType;
738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  typedef LayerList LayerListType;
748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  typedef RenderSurface RenderSurfaceType;
758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  enum LayerIdLabels {
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    INVALID_ID = -1,
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static scoped_refptr<Layer> Create();
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int id() const { return layer_id_; }
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Layer* RootLayer();
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Layer* parent() { return parent_; }
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const Layer* parent() const { return parent_; }
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddChild(scoped_refptr<Layer> child);
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void InsertChild(scoped_refptr<Layer> child, size_t index);
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ReplaceChild(Layer* reference, scoped_refptr<Layer> new_layer);
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveFromParent();
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveAllChildren();
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetChildren(const LayerList& children);
9358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch  bool HasAncestor(const Layer* ancestor) const;
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const LayerList& children() const { return children_; }
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Layer* child_at(size_t index) { return children_[index].get(); }
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // This requests the layer and its subtree be rendered and given to the
9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // callback. If the copy is unable to be produced (the layer is destroyed
10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // first), then the callback is called with a NULL/empty result.
10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void RequestCopyOfOutput(scoped_ptr<CopyOutputRequest> request);
10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool HasCopyRequest() const {
10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return !copy_requests_.empty();
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetAnchorPoint(gfx::PointF anchor_point);
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::PointF anchor_point() const { return anchor_point_; }
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetAnchorPointZ(float anchor_point_z);
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float anchor_point_z() const { return anchor_point_z_; }
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetBackgroundColor(SkColor background_color);
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SkColor background_color() const { return background_color_; }
114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // If contents_opaque(), return an opaque color else return a
115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // non-opaque color.  Tries to return background_color(), if possible.
116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SkColor SafeOpaqueBackgroundColor() const;
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // A layer's bounds are in logical, non-page-scaled pixels (however, the
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // root layer's bounds are in physical pixels).
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetBounds(gfx::Size bounds);
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Size bounds() const { return bounds_; }
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetMasksToBounds(bool masks_to_bounds);
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool masks_to_bounds() const { return masks_to_bounds_; }
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetMaskLayer(Layer* mask_layer);
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Layer* mask_layer() { return mask_layer_.get(); }
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const Layer* mask_layer() const { return mask_layer_.get(); }
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetNeedsDisplayRect(const gfx::RectF& dirty_rect);
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetNeedsDisplay() { SetNeedsDisplayRect(gfx::RectF(bounds())); }
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetOpacity(float opacity);
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float opacity() const { return opacity_; }
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool OpacityIsAnimating() const;
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool OpacityCanAnimateOnImplThread() const;
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SetBlendMode(SkXfermode::Mode blend_mode);
139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SkXfermode::Mode blend_mode() const { return blend_mode_; }
140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool uses_default_blend_mode() const {
142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return blend_mode_ == SkXfermode::kSrcOver_Mode;
143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // A layer is root for an isolated group when it and all its descendants are
146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // drawn over a black and fully transparent background, creating an isolated
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // group. It should be used along with SetBlendMode(), in order to restrict
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // layers within the group to blend with layers outside this group.
149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SetIsRootForIsolatedGroup(bool root);
150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool is_root_for_isolated_group() const {
151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return is_root_for_isolated_group_;
152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void SetFilters(const FilterOperations& filters);
155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  const FilterOperations& filters() const { return filters_; }
1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  bool FilterIsAnimating() const;
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Background filters are filters applied to what is behind this layer, when
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // they are viewed through non-opaque regions in this layer. They are used
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // through the WebLayer interface, and are not exposed to HTML.
161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void SetBackgroundFilters(const FilterOperations& filters);
162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  const FilterOperations& background_filters() const {
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return background_filters_;
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetContentsOpaque(bool opaque);
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool contents_opaque() const { return contents_opaque_; }
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetPosition(gfx::PointF position);
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::PointF position() const { return position_; }
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetIsContainerForFixedPositionLayers(bool container);
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool IsContainerForFixedPositionLayers() const;
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void SetPositionConstraint(const LayerPositionConstraint& constraint);
176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const LayerPositionConstraint& position_constraint() const {
177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return position_constraint_;
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetSublayerTransform(const gfx::Transform& sublayer_transform);
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const gfx::Transform& sublayer_transform() const {
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return sublayer_transform_;
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetTransform(const gfx::Transform& transform);
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const gfx::Transform& transform() const { return transform_; }
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool TransformIsAnimating() const;
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void SetScrollParent(Layer* parent);
1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  Layer* scroll_parent() { return scroll_parent_; }
1923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const Layer* scroll_parent() const { return scroll_parent_; }
1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void AddScrollChild(Layer* child);
1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void RemoveScrollChild(Layer* child);
1963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  std::set<Layer*>* scroll_children() { return scroll_children_.get(); }
1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const std::set<Layer*>* scroll_children() const {
1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    return scroll_children_.get();
2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
2013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void SetClipParent(Layer* ancestor);
2033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  Layer* clip_parent() { return clip_parent_; }
2053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const Layer* clip_parent() const {
2063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    return clip_parent_;
2073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
2083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void AddClipChild(Layer* child);
2103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void RemoveClipChild(Layer* child);
2113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  std::set<Layer*>* clip_children() { return clip_children_.get(); }
2133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const std::set<Layer*>* clip_children() const {
2143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    return clip_children_.get();
2153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
2163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  DrawProperties<Layer>& draw_properties() { return draw_properties_; }
2188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  const DrawProperties<Layer>& draw_properties() const {
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_;
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The following are shortcut accessors to get various information from
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // draw_properties_
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const gfx::Transform& draw_transform() const {
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.target_space_transform;
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const gfx::Transform& screen_space_transform() const {
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.screen_space_transform;
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float draw_opacity() const { return draw_properties_.opacity; }
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool draw_opacity_is_animating() const {
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.opacity_is_animating;
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool draw_transform_is_animating() const {
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.target_space_transform_is_animating;
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool screen_space_transform_is_animating() const {
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.screen_space_transform_is_animating;
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool screen_space_opacity_is_animating() const {
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.screen_space_opacity_is_animating;
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool can_use_lcd_text() const { return draw_properties_.can_use_lcd_text; }
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool is_clipped() const { return draw_properties_.is_clipped; }
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect clip_rect() const { return draw_properties_.clip_rect; }
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect drawable_content_rect() const {
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.drawable_content_rect;
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect visible_content_rect() const {
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.visible_content_rect;
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Layer* render_target() {
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DCHECK(!draw_properties_.render_target ||
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           draw_properties_.render_target->render_surface());
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.render_target;
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const Layer* render_target() const {
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DCHECK(!draw_properties_.render_target ||
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           draw_properties_.render_target->render_surface());
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.render_target;
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RenderSurface* render_surface() const {
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_properties_.render_surface.get();
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
265424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  int num_unclipped_descendants() const {
266424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    return draw_properties_.num_unclipped_descendants;
267424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetScrollOffset(gfx::Vector2d scroll_offset);
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Vector2d scroll_offset() const { return scroll_offset_; }
271868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void SetScrollOffsetFromImplSide(gfx::Vector2d scroll_offset);
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetMaxScrollOffset(gfx::Vector2d max_scroll_offset);
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Vector2d max_scroll_offset() const { return max_scroll_offset_; }
2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetScrollable(bool scrollable);
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool scrollable() const { return scrollable_; }
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  void SetUserScrollable(bool horizontal, bool vertical);
2808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool user_scrollable_horizontal() const {
2818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    return user_scrollable_horizontal_;
2828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  }
2838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool user_scrollable_vertical() const { return user_scrollable_vertical_; }
2848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetShouldScrollOnMainThread(bool should_scroll_on_main_thread);
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool should_scroll_on_main_thread() const {
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return should_scroll_on_main_thread_;
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetHaveWheelEventHandlers(bool have_wheel_event_handlers);
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool have_wheel_event_handlers() const { return have_wheel_event_handlers_; }
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetNonFastScrollableRegion(const Region& non_fast_scrollable_region);
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const Region& non_fast_scrollable_region() const {
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return non_fast_scrollable_region_;
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetTouchEventHandlerRegion(const Region& touch_event_handler_region);
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const Region& touch_event_handler_region() const {
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return touch_event_handler_region_;
3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
303eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void set_did_scroll_callback(const base::Closure& callback) {
304eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    did_scroll_callback_ = callback;
3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetDrawCheckerboardForMissingTiles(bool checkerboard);
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool DrawCheckerboardForMissingTiles() const {
3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return draw_checkerboard_for_missing_tiles_;
3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetForceRenderSurface(bool force_render_surface);
3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool force_render_surface() const { return force_render_surface_; }
3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  gfx::Vector2d ScrollDelta() const { return gfx::Vector2d(); }
3167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  gfx::Vector2dF TotalScrollOffset() const {
3177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    // Floating point to match the LayerImpl version.
3187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return scroll_offset() + ScrollDelta();
3197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetDoubleSided(bool double_sided);
3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool double_sided() const { return double_sided_; }
3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetPreserves3d(bool preserves_3d) { preserves_3d_ = preserves_3d; }
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool preserves_3d() const { return preserves_3d_; }
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_use_parent_backface_visibility(bool use) {
3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    use_parent_backface_visibility_ = use;
3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool use_parent_backface_visibility() const {
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return use_parent_backface_visibility_;
3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetLayerTreeHost(LayerTreeHost* host);
3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool HasDelegatedContent() const { return false; }
3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool HasContributingDelegatedRenderPasses() const { return false; }
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetIsDrawable(bool is_drawable);
3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
341eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void SetHideLayerAndSubtree(bool hide);
342eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool hide_layer_and_subtree() const { return hide_layer_and_subtree_; }
343eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetReplicaLayer(Layer* layer);
3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Layer* replica_layer() { return replica_layer_.get(); }
3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const Layer* replica_layer() const { return replica_layer_.get(); }
3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
348868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  bool has_mask() const { return !!mask_layer_.get(); }
349868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  bool has_replica() const { return !!replica_layer_.get(); }
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool replica_has_mask() const {
351868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return replica_layer_.get() &&
352868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)           (mask_layer_.get() || replica_layer_->mask_layer_.get());
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // These methods typically need to be overwritten by derived classes.
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool DrawsContent() const;
357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void SavePaintProperties();
3587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Returns true iff any resources were updated that need to be committed.
3597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual bool Update(ResourceUpdateQueue* queue,
3607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                      const OcclusionTracker* occlusion);
3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool NeedMoreUpdates();
3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetIsMask(bool is_mask) {}
36390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void ReduceMemoryUsage() {}
3644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void OnOutputSurfaceCreated() {}
3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual std::string DebugName();
367a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual scoped_refptr<base::debug::ConvertableToTraceFormat> TakeDebugInfo();
3683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
3693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void SetLayerClient(LayerClient* client) { client_ = client; }
3703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
37190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void SetCompositingReasons(CompositingReasons reasons);
3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void PushPropertiesTo(LayerImpl* layer);
3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CreateRenderSurface();
376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void ClearRenderSurface();
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The contents scale converts from logical, non-page-scaled pixels to target
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // pixels. The contents scale is 1 for the root layer as it is already in
3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // physical pixels. By default contents scale is forced to be 1 except for
3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // subclasses of ContentsScalingLayer.
3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float contents_scale_x() const { return draw_properties_.contents_scale_x; }
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float contents_scale_y() const { return draw_properties_.contents_scale_y; }
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Size content_bounds() const { return draw_properties_.content_bounds; }
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void CalculateContentsScale(float ideal_contents_scale,
387b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                                      float device_scale_factor,
388b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                                      float page_scale_factor,
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      bool animating_transform_to_screen,
3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      float* contents_scale_x,
3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      float* contents_scale_y,
3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      gfx::Size* content_bounds);
3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
394424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  LayerTreeHost* layer_tree_host() { return layer_tree_host_; }
395424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const LayerTreeHost* layer_tree_host() const { return layer_tree_host_; }
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Set the priority of all desired textures in this layer.
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetTexturePriorities(const PriorityCalculator& priority_calc) {}
3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool AddAnimation(scoped_ptr<Animation> animation);
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void PauseAnimation(int animation_id, double time_offset);
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveAnimation(int animation_id);
4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  bool AnimatedBoundsForBox(const gfx::BoxF& box, gfx::BoxF* bounds) {
4053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    return layer_animation_controller_->AnimatedBoundsForBox(box, bounds);
4063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
4073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerAnimationController* layer_animation_controller() {
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return layer_animation_controller_.get();
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void SetLayerAnimationControllerForTest(
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_refptr<LayerAnimationController> controller);
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
414eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void set_layer_animation_delegate(AnimationDelegate* delegate) {
415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    layer_animation_controller_->set_layer_animation_delegate(delegate);
4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool HasActiveAnimation() const;
4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddLayerAnimationEventObserver(
4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      LayerAnimationEventObserver* animation_observer);
4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveLayerAnimationEventObserver(
4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      LayerAnimationEventObserver* animation_observer);
4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual Region VisibleContentOpaqueRegion() const;
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
42758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ScrollbarLayerInterface* ToScrollbarLayer();
4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect LayerRectToContentRect(const gfx::RectF& layer_rect) const;
4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual skia::RefPtr<SkPicture> GetPicture() const;
4323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Constructs a LayerImpl of the correct runtime type for this Layer type.
4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl);
4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
436a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  bool NeedsDisplayForTesting() const { return !update_rect_.IsEmpty(); }
437a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  void ResetNeedsDisplayForTesting() { update_rect_ = gfx::RectF(); }
4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  RenderingStatsInstrumentation* rendering_stats_instrumentation() const;
440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const PaintProperties& paint_properties() const {
442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return paint_properties_;
443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
445b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // The scale at which contents should be rastered, to match the scale at
446b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // which they will drawn to the screen. This scale is a component of the
447b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // contents scale but does not include page/device scale factors.
448b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // TODO(danakj): This goes away when TiledLayer goes away.
449b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  void set_raster_scale(float scale) { raster_scale_ = scale; }
450b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  float raster_scale() const { return raster_scale_; }
451b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  bool raster_scale_is_unknown() const { return raster_scale_ == 0.f; }
452b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
45390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual bool SupportsLCDText() const;
45490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  bool needs_push_properties() const { return needs_push_properties_; }
4567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  bool descendant_needs_push_properties() const {
4577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return num_dependents_need_push_properties_ > 0;
4587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
4597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
4604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void RunMicroBenchmark(MicroBenchmark* benchmark);
4614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class LayerImpl;
4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class TreeSynchronizer;
4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~Layer();
4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Layer();
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
469558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // These SetNeeds functions are in order of severity of update:
470558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  //
471558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // Called when this layer has been modified in some way, but isn't sure
472558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // that it needs a commit yet.  It needs CalcDrawProperties and UpdateLayers
473558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // before it knows whether or not a commit is required.
474558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void SetNeedsUpdate();
475558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // Called when a property has been modified in a way that the layer
476558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // knows immediately that a commit is required.  This implies SetNeedsUpdate
477558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // as well as SetNeedsPushProperties to push that property.
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetNeedsCommit();
479558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // Called when there's been a change in layer structure.  Implies both
480558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // SetNeedsUpdate and SetNeedsCommit, but not SetNeedsPushProperties.
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetNeedsFullTreeSync();
482424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
483424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Called when the next commit should wait until the pending tree is activated
484424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // before finishing the commit and unblocking the main thread. Used to ensure
485424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // unused resources on the impl thread are returned before commit completes.
486424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void SetNextCommitWaitsForActivation();
4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Called when the blend mode or filters have been changed.
489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SetNeedsFilterContextIfNeeded();
490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
4917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void SetNeedsPushProperties();
4927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void AddDependentNeedsPushProperties();
4937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void RemoveDependentNeedsPushProperties();
4947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  bool parent_should_know_need_push_properties() const {
4957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return needs_push_properties() || descendant_needs_push_properties();
4967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
4977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
498424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  bool IsPropertyChangeAllowed() const;
499424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
5003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // If this layer has a scroll parent, it removes |this| from its list of
5013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // scroll children.
5023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void RemoveFromScrollTree();
5033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
5043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // If this layer has a clip parent, it removes |this| from its list of clip
5053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // children.
5063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void RemoveFromClipTree();
5073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
508b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  void reset_raster_scale_to_unknown() { raster_scale_ = 0.f; }
509b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
5107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // This flag is set when the layer needs to push properties to the impl
5117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // side.
5127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  bool needs_push_properties_;
5137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // The number of direct children or dependent layers that need to be recursed
5157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // to in order for them or a descendent of them to push properties to the impl
5167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // side.
5177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  int num_dependents_need_push_properties_;
5187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Tracks whether this layer may have changed stacking order with its
5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // siblings.
5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool stacking_order_changed_;
5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The update rect is the region of the compositor resource that was
5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // actually updated by the compositor. For layers that may do updating
5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // outside the compositor's control (i.e. plugin layers), this information
5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // is not available and the update rect will remain empty.
5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Note this rect is in layer space (not content space).
5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::RectF update_rect_;
5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<Layer> mask_layer_;
5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int layer_id_;
5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // When true, the layer is about to perform an update. Any commit requests
535558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // will be handled implicitly after the update completes.
5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool ignore_set_needs_commit_;
5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class base::RefCounted<Layer>;
5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetParent(Layer* layer);
5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool DescendantIsFixedToContainerLayer() const;
5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns the index of the child or -1 if not found.
5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int IndexOfChild(const Layer* reference);
5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This should only be called from RemoveFromParent().
5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveChildOrDependent(Layer* child);
5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
550a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // LayerAnimationValueProvider implementation.
551a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual gfx::Vector2dF ScrollOffsetForAnimation() const OVERRIDE;
552a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // LayerAnimationValueObserver implementation.
5544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void OnFilterAnimated(const FilterOperations& filters) OVERRIDE;
5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnOpacityAnimated(float opacity) OVERRIDE;
5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnTransformAnimated(const gfx::Transform& transform) OVERRIDE;
557a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void OnScrollOffsetAnimated(gfx::Vector2dF scroll_offset) OVERRIDE;
558f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void OnAnimationWaitingForDeletion() OVERRIDE;
5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsActive() const OVERRIDE;
5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerList children_;
5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Layer* parent_;
5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Layer instances have a weak pointer to their LayerTreeHost.
5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This pointer value is nil when a Layer is not in a tree and is
5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // updated via SetLayerTreeHost() if a layer moves between trees.
5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerTreeHost* layer_tree_host_;
5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<LayerAnimationController> layer_animation_controller_;
5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Layer properties.
5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Size bounds_;
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Vector2d scroll_offset_;
5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Vector2d max_scroll_offset_;
576a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool scrollable_ : 1;
577a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool should_scroll_on_main_thread_ : 1;
578a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool have_wheel_event_handlers_ : 1;
579a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool user_scrollable_horizontal_ : 1;
580a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool user_scrollable_vertical_ : 1;
581a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool is_root_for_isolated_group_ : 1;
582a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool is_container_for_fixed_position_layers_ : 1;
583a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool is_drawable_ : 1;
584a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool hide_layer_and_subtree_ : 1;
585a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool masks_to_bounds_ : 1;
586a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool contents_opaque_ : 1;
587a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool double_sided_ : 1;
588a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool preserves_3d_ : 1;
589a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool use_parent_backface_visibility_ : 1;
590a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool draw_checkerboard_for_missing_tiles_ : 1;
591a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool force_render_surface_ : 1;
5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Region non_fast_scrollable_region_;
5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Region touch_event_handler_region_;
5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::PointF position_;
5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::PointF anchor_point_;
5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SkColor background_color_;
59790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  CompositingReasons compositing_reasons_;
5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float opacity_;
599f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SkXfermode::Mode blend_mode_;
600eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FilterOperations filters_;
601eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FilterOperations background_filters_;
6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float anchor_point_z_;
603c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  LayerPositionConstraint position_constraint_;
6043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  Layer* scroll_parent_;
6053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  scoped_ptr<std::set<Layer*> > scroll_children_;
6063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
6073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  Layer* clip_parent_;
6083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  scoped_ptr<std::set<Layer*> > clip_children_;
6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Transform transform_;
6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Transform sublayer_transform_;
6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Replica layer used for reflections.
6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<Layer> replica_layer_;
6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Transient properties.
6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float raster_scale_;
6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  LayerClient* client_;
6203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
62190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ScopedPtrVector<CopyOutputRequest> copy_requests_;
6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
623eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::Closure did_scroll_callback_;
6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  DrawProperties<Layer> draw_properties_;
6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
627c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  PaintProperties paint_properties_;
628c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(Layer);
6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CC_LAYERS_LAYER_H_
635