12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 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_RESOURCES_PICTURE_PILE_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_RESOURCES_PICTURE_PILE_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/picture_pile_base.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PicturePileImpl;
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Region;
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass RenderingStatsInstrumentation;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT PicturePile : public PicturePileBase {
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PicturePile();
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Re-record parts of the picture that are invalid.
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Invalidations are in layer space, and will be expanded to cover everything
22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // that was either recorded/changed or that has no recording, leaving out only
23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // pieces that we had a recording for and it was not changed.
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Return true iff the pile was modified.
25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  bool UpdateAndExpandInvalidation(
26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      ContentLayerClient* painter,
27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      Region* invalidation,
28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      SkColor background_color,
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      bool contents_opaque,
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      bool contents_fill_bounds_completely,
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const gfx::Size& layer_size,
32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const gfx::Rect& visible_layer_rect,
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      int frame_number,
34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      Picture::RecordingMode recording_mode,
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      RenderingStatsInstrumentation* stats_instrumentation);
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void SetEmptyBounds();
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_slow_down_raster_scale_factor(int factor) {
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    slow_down_raster_scale_factor_for_debug_ = factor;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void set_show_debug_picture_borders(bool show) {
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    show_debug_picture_borders_ = show;
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
47a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  bool is_suitable_for_gpu_rasterization() const {
48a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    return is_suitable_for_gpu_rasterization_;
49a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
50a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  void SetUnsuitableForGpuRasterizationForTesting() {
51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    is_suitable_for_gpu_rasterization_ = false;
52a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
53a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
545b62eb5758cb7b791cfdd45cf78f35dc060631b6Ben Murdoch  void SetPixelRecordDistanceForTesting(int d) { pixel_record_distance_ = d; }
555b62eb5758cb7b791cfdd45cf78f35dc060631b6Ben Murdoch
56b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) protected:
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~PicturePile();
58b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
59b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) private:
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend class PicturePileImpl;
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void DetermineIfSolidColor();
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
64a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  bool is_suitable_for_gpu_rasterization_;
655b62eb5758cb7b791cfdd45cf78f35dc060631b6Ben Murdoch  int pixel_record_distance_;
66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PicturePile);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CC_RESOURCES_PICTURE_PILE_H_
73