Home | History | Annotate | Download | only in layers
      1 // Copyright 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CC_LAYERS_PICTURE_LAYER_IMPL_H_
      6 #define CC_LAYERS_PICTURE_LAYER_IMPL_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "cc/base/cc_export.h"
     12 #include "cc/base/scoped_ptr_vector.h"
     13 #include "cc/layers/layer_impl.h"
     14 #include "cc/resources/picture_layer_tiling.h"
     15 #include "cc/resources/picture_layer_tiling_set.h"
     16 #include "cc/resources/picture_pile_impl.h"
     17 #include "skia/ext/refptr.h"
     18 #include "third_party/skia/include/core/SkPicture.h"
     19 
     20 namespace cc {
     21 
     22 struct AppendQuadsData;
     23 class QuadSink;
     24 
     25 class CC_EXPORT PictureLayerImpl
     26     : public LayerImpl,
     27       NON_EXPORTED_BASE(public PictureLayerTilingClient) {
     28  public:
     29   static scoped_ptr<PictureLayerImpl> Create(LayerTreeImpl* tree_impl, int id) {
     30     return make_scoped_ptr(new PictureLayerImpl(tree_impl, id));
     31   }
     32   virtual ~PictureLayerImpl();
     33 
     34   // LayerImpl overrides.
     35   virtual const char* LayerTypeAsString() const OVERRIDE;
     36   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
     37       OVERRIDE;
     38   virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
     39   virtual void AppendQuads(QuadSink* quad_sink,
     40                            AppendQuadsData* append_quads_data) OVERRIDE;
     41   virtual void UpdateTilePriorities() OVERRIDE;
     42   virtual void DidBecomeActive() OVERRIDE;
     43   virtual void DidBeginTracing() OVERRIDE;
     44   virtual void DidLoseOutputSurface() OVERRIDE;
     45   virtual void CalculateContentsScale(float ideal_contents_scale,
     46                                       float device_scale_factor,
     47                                       float page_scale_factor,
     48                                       bool animating_transform_to_screen,
     49                                       float* contents_scale_x,
     50                                       float* contents_scale_y,
     51                                       gfx::Size* content_bounds) OVERRIDE;
     52   virtual skia::RefPtr<SkPicture> GetPicture() OVERRIDE;
     53 
     54   // PictureLayerTilingClient overrides.
     55   virtual scoped_refptr<Tile> CreateTile(PictureLayerTiling* tiling,
     56                                          gfx::Rect content_rect) OVERRIDE;
     57   virtual void UpdatePile(Tile* tile) OVERRIDE;
     58   virtual gfx::Size CalculateTileSize(
     59       gfx::Size content_bounds) const OVERRIDE;
     60   virtual const Region* GetInvalidation() OVERRIDE;
     61   virtual const PictureLayerTiling* GetTwinTiling(
     62       const PictureLayerTiling* tiling) OVERRIDE;
     63 
     64   // PushPropertiesTo active tree => pending tree.
     65   void SyncFromActiveLayer();
     66   void SyncTiling(const PictureLayerTiling* tiling);
     67   void UpdateTwinLayer();
     68 
     69   void CreateTilingSetIfNeeded();
     70 
     71   // Mask-related functions
     72   void SetIsMask(bool is_mask);
     73   virtual ResourceProvider::ResourceId ContentsResourceId() const OVERRIDE;
     74 
     75   virtual size_t GPUMemoryUsageInBytes() const OVERRIDE;
     76 
     77  protected:
     78   PictureLayerImpl(LayerTreeImpl* tree_impl, int id);
     79   PictureLayerTiling* AddTiling(float contents_scale);
     80   void RemoveTiling(float contents_scale);
     81   void SyncFromActiveLayer(const PictureLayerImpl* other);
     82   void ManageTilings(bool animating_transform_to_screen);
     83   virtual bool ShouldAdjustRasterScale(
     84       bool animating_transform_to_screen) const;
     85   virtual void CalculateRasterContentsScale(
     86       bool animating_transform_to_screen,
     87       float* raster_contents_scale,
     88       float* low_res_raster_contents_scale) const;
     89   void CleanUpTilingsOnActiveLayer(
     90       std::vector<PictureLayerTiling*> used_tilings);
     91   float MinimumContentsScale() const;
     92   void UpdateLCDTextStatus(bool new_status);
     93   void ResetRasterScale();
     94   void MarkVisibleResourcesAsRequired() const;
     95 
     96   bool CanHaveTilings() const;
     97   bool CanHaveTilingWithScale(float contents_scale) const;
     98 
     99   virtual void GetDebugBorderProperties(
    100       SkColor* color, float* width) const OVERRIDE;
    101   virtual void AsValueInto(base::DictionaryValue* dict) const OVERRIDE;
    102 
    103   PictureLayerImpl* twin_layer_;
    104 
    105   scoped_ptr<PictureLayerTilingSet> tilings_;
    106   scoped_refptr<PicturePileImpl> pile_;
    107   Region invalidation_;
    108 
    109   gfx::Transform last_screen_space_transform_;
    110   gfx::Size last_bounds_;
    111   float last_content_scale_;
    112   bool is_mask_;
    113 
    114   float ideal_page_scale_;
    115   float ideal_device_scale_;
    116   float ideal_source_scale_;
    117   float ideal_contents_scale_;
    118 
    119   float raster_page_scale_;
    120   float raster_device_scale_;
    121   float raster_source_scale_;
    122   float raster_contents_scale_;
    123   float low_res_raster_contents_scale_;
    124 
    125   bool raster_source_scale_was_animating_;
    126   bool is_using_lcd_text_;
    127   // A sanity state check to make sure UpdateTilePriorities only gets called
    128   // after a CalculateContentsScale/ManageTilings.
    129   bool should_update_tile_priorities_;
    130 
    131   friend class PictureLayer;
    132   DISALLOW_COPY_AND_ASSIGN(PictureLayerImpl);
    133 };
    134 
    135 }  // namespace cc
    136 
    137 #endif  // CC_LAYERS_PICTURE_LAYER_IMPL_H_
    138