Upstream version 10.38.208.0
[platform/framework/web/crosswalk.git] / src / cc / layers / picture_layer_impl.h
index 80d09dd..6166720 100644 (file)
 #include "cc/resources/picture_layer_tiling.h"
 #include "cc/resources/picture_layer_tiling_set.h"
 #include "cc/resources/picture_pile_impl.h"
-#include "cc/trees/layer_tree_impl.h"
 #include "skia/ext/refptr.h"
 #include "third_party/skia/include/core/SkPicture.h"
 
 namespace cc {
 
 struct AppendQuadsData;
-class QuadSink;
 class MicroBenchmarkImpl;
 class Tile;
 
@@ -29,6 +27,15 @@ class CC_EXPORT PictureLayerImpl
     : public LayerImpl,
       NON_EXPORTED_BASE(public PictureLayerTilingClient) {
  public:
+  struct CC_EXPORT Pair {
+    Pair();
+    Pair(PictureLayerImpl* active_layer, PictureLayerImpl* pending_layer);
+    ~Pair();
+
+    PictureLayerImpl* active;
+    PictureLayerImpl* pending;
+  };
+
   class CC_EXPORT LayerRasterTileIterator {
    public:
     LayerRasterTileIterator();
@@ -36,6 +43,7 @@ class CC_EXPORT PictureLayerImpl
     ~LayerRasterTileIterator();
 
     Tile* operator*();
+    const Tile* operator*() const;
     LayerRasterTileIterator& operator++();
     operator bool() const;
 
@@ -49,7 +57,7 @@ class CC_EXPORT PictureLayerImpl
       TilePriority::PriorityBin tile_type;
     };
 
-    int current_stage_;
+    size_t current_stage_;
 
     // One low res stage, and three high res stages.
     IterationStage stages_[4];
@@ -64,20 +72,25 @@ class CC_EXPORT PictureLayerImpl
     ~LayerEvictionTileIterator();
 
     Tile* operator*();
+    const Tile* operator*() const;
     LayerEvictionTileIterator& operator++();
     operator bool() const;
 
    private:
-    void AdvanceToNextIterator();
-    bool IsCorrectType(
-        PictureLayerTiling::TilingEvictionTileIterator* it) const;
+    bool AdvanceToNextCategory();
+    bool AdvanceToNextTilingRangeType();
+    bool AdvanceToNextTiling();
 
-    std::vector<PictureLayerTiling::TilingEvictionTileIterator> iterators_;
-    size_t iterator_index_;
-    TilePriority::PriorityBin iteration_stage_;
-    bool required_for_activation_;
+    PictureLayerTilingSet::TilingRange CurrentTilingRange() const;
+    size_t CurrentTilingIndex() const;
 
     PictureLayerImpl* layer_;
+    TreePriority tree_priority_;
+
+    PictureLayerTiling::EvictionCategory current_category_;
+    PictureLayerTilingSet::TilingRangeType current_tiling_range_type_;
+    size_t current_tiling_;
+    PictureLayerTiling::TilingEvictionTileIterator current_iterator_;
   };
 
   static scoped_ptr<PictureLayerImpl> Create(LayerTreeImpl* tree_impl, int id) {
@@ -90,57 +103,50 @@ class CC_EXPORT PictureLayerImpl
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
       OVERRIDE;
   virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
-  virtual void AppendQuads(QuadSink* quad_sink,
+  virtual void AppendQuads(RenderPass* render_pass,
+                           const OcclusionTracker<LayerImpl>& occlusion_tracker,
                            AppendQuadsData* append_quads_data) OVERRIDE;
-  virtual void UpdateTilePriorities() OVERRIDE;
-  virtual void NotifyTileInitialized(const Tile* tile) OVERRIDE;
+  virtual void UpdateTiles(
+      const OcclusionTracker<LayerImpl>* occlusion_tracker) OVERRIDE;
+  virtual void NotifyTileStateChanged(const Tile* tile) OVERRIDE;
   virtual void DidBecomeActive() OVERRIDE;
   virtual void DidBeginTracing() OVERRIDE;
   virtual void ReleaseResources() OVERRIDE;
-  virtual void CalculateContentsScale(float ideal_contents_scale,
-                                      float device_scale_factor,
-                                      float page_scale_factor,
-                                      float maximum_animation_contents_scale,
-                                      bool animating_transform_to_screen,
-                                      float* contents_scale_x,
-                                      float* contents_scale_y,
-                                      gfx::Size* content_bounds) OVERRIDE;
   virtual skia::RefPtr<SkPicture> GetPicture() OVERRIDE;
 
   // PictureLayerTilingClient overrides.
   virtual scoped_refptr<Tile> CreateTile(
     PictureLayerTiling* tiling,
     const gfx::Rect& content_rect) OVERRIDE;
-  virtual void UpdatePile(Tile* tile) OVERRIDE;
+  virtual PicturePileImpl* GetPile() OVERRIDE;
   virtual gfx::Size CalculateTileSize(
       const gfx::Size& content_bounds) const OVERRIDE;
   virtual const Region* GetInvalidation() OVERRIDE;
   virtual const PictureLayerTiling* GetTwinTiling(
       const PictureLayerTiling* tiling) const OVERRIDE;
+  virtual PictureLayerTiling* GetRecycledTwinTiling(
+      const PictureLayerTiling* tiling) OVERRIDE;
   virtual size_t GetMaxTilesForInterestArea() const OVERRIDE;
   virtual float GetSkewportTargetTimeInSeconds() const OVERRIDE;
   virtual int GetSkewportExtrapolationLimitInContentPixels() const OVERRIDE;
+  virtual WhichTree GetTree() const OVERRIDE;
 
   // PushPropertiesTo active tree => pending tree.
   void SyncTiling(const PictureLayerTiling* tiling);
 
-  // Mask-related functions
-  void SetIsMask(bool is_mask);
+  // Mask-related functions.
   virtual ResourceProvider::ResourceId ContentsResourceId() const OVERRIDE;
 
   virtual size_t GPUMemoryUsageInBytes() const OVERRIDE;
 
   virtual void RunMicroBenchmark(MicroBenchmarkImpl* benchmark) OVERRIDE;
 
-  bool use_gpu_rasterization() const {
-    return layer_tree_impl()->use_gpu_rasterization();
-  }
-
   // Functions used by tile manager.
-  void DidUnregisterLayer();
   PictureLayerImpl* GetTwinLayer() { return twin_layer_; }
-  WhichTree GetTree() const;
   bool IsOnActiveOrPendingTree() const;
+  // Virtual for testing.
+  virtual bool HasValidTilePriorities() const;
+  bool AllTilesRequiredForActivationAreReadyToDraw() const;
 
  protected:
   friend class LayerRasterTileIterator;
@@ -150,20 +156,15 @@ class CC_EXPORT PictureLayerImpl
   void RemoveTiling(float contents_scale);
   void RemoveAllTilings();
   void SyncFromActiveLayer(const PictureLayerImpl* other);
-  void ManageTilings(bool animating_transform_to_screen,
-                     float maximum_animation_contents_scale);
-  bool ShouldHaveLowResTiling() const {
-    return should_use_low_res_tiling_ && !use_gpu_rasterization();
-  }
-  virtual bool ShouldAdjustRasterScale(
-      bool animating_transform_to_screen) const;
-  virtual void RecalculateRasterScales(bool animating_transform_to_screen,
-                                       float maximum_animation_contents_scale);
+  void AddTilingsForRasterScale();
+  void UpdateTilePriorities(
+      const OcclusionTracker<LayerImpl>* occlusion_tracker);
+  virtual bool ShouldAdjustRasterScale() const;
+  virtual void RecalculateRasterScales();
   void CleanUpTilingsOnActiveLayer(
       std::vector<PictureLayerTiling*> used_tilings);
   float MinimumContentsScale() const;
   float SnappedContentsScale(float new_contents_scale);
-  void UpdateLCDTextStatus(bool new_status);
   void ResetRasterScale();
   void MarkVisibleResourcesAsRequired() const;
   bool MarkVisibleTilesAsRequired(
@@ -172,6 +173,8 @@ class CC_EXPORT PictureLayerImpl
       float contents_scale,
       const gfx::Rect& rect,
       const Region& missing_region) const;
+  gfx::Rect GetViewportForTilePriorityInContentSpace() const;
+  PictureLayerImpl* GetRecycledTwinLayer();
 
   void DoPostCommitInitializationIfNeeded() {
     if (needs_post_commit_initialization_)
@@ -185,7 +188,10 @@ class CC_EXPORT PictureLayerImpl
 
   virtual void GetDebugBorderProperties(
       SkColor* color, float* width) const OVERRIDE;
-  virtual void AsValueInto(base::DictionaryValue* dict) const OVERRIDE;
+  virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE;
+
+  virtual void UpdateIdealScales();
+  float MaximumTilingContentsScale() const;
 
   PictureLayerImpl* twin_layer_;
 
@@ -193,8 +199,6 @@ class CC_EXPORT PictureLayerImpl
   scoped_refptr<PicturePileImpl> pile_;
   Region invalidation_;
 
-  bool is_mask_;
-
   float ideal_page_scale_;
   float ideal_device_scale_;
   float ideal_source_scale_;
@@ -207,20 +211,16 @@ class CC_EXPORT PictureLayerImpl
   float low_res_raster_contents_scale_;
 
   bool raster_source_scale_is_fixed_;
-  bool was_animating_transform_to_screen_;
-  bool is_using_lcd_text_;
+  bool was_screen_space_transform_animating_;
   bool needs_post_commit_initialization_;
   // A sanity state check to make sure UpdateTilePriorities only gets called
   // after a CalculateContentsScale/ManageTilings.
   bool should_update_tile_priorities_;
-  bool should_use_low_res_tiling_;
-
-  bool layer_needs_to_register_itself_;
 
   // Save a copy of the visible rect and viewport size of the last frame that
   // has a valid viewport for prioritizing tiles.
   gfx::Rect visible_rect_for_tile_priority_;
-  gfx::Size viewport_size_for_tile_priority_;
+  gfx::Rect viewport_rect_for_tile_priority_;
   gfx::Transform screen_space_transform_for_tile_priority_;
 
   friend class PictureLayer;