// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CC_PLAYBACK_DISPLAY_LIST_RECORDING_SOURCE_H_ #define CC_PLAYBACK_DISPLAY_LIST_RECORDING_SOURCE_H_ #include #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "cc/base/cc_export.h" #include "cc/base/invalidation_region.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/size.h" namespace cc { namespace proto { class DisplayListRecordingSource; } // namespace proto class ContentLayerClient; class DisplayItemList; class DisplayListRasterSource; class ImageSerializationProcessor; class Region; class CC_EXPORT DisplayListRecordingSource { public: // TODO(schenney) Remove RECORD_WITH_SK_NULL_CANVAS when we no longer // support a non-Slimming Paint path. enum RecordingMode { RECORD_NORMALLY, RECORD_WITH_SK_NULL_CANVAS, RECORD_WITH_PAINTING_DISABLED, RECORD_WITH_CACHING_DISABLED, RECORD_WITH_CONSTRUCTION_DISABLED, RECORD_WITH_SUBSEQUENCE_CACHING_DISABLED, RECORDING_MODE_COUNT, // Must be the last entry. }; DisplayListRecordingSource(); virtual ~DisplayListRecordingSource(); void ToProtobuf( proto::DisplayListRecordingSource* proto, ImageSerializationProcessor* image_serialization_processor) const; void FromProtobuf(const proto::DisplayListRecordingSource& proto, ImageSerializationProcessor* image_serialization_processor); bool UpdateAndExpandInvalidation(ContentLayerClient* painter, Region* invalidation, const gfx::Size& layer_size, const gfx::Rect& visible_layer_rect, int frame_number, RecordingMode recording_mode); gfx::Size GetSize() const; void SetEmptyBounds(); void SetSlowdownRasterScaleFactor(int factor); void SetGenerateDiscardableImagesMetadata(bool generate_metadata); void SetBackgroundColor(SkColor background_color); void SetRequiresClear(bool requires_clear); void SetNeedsDisplayRect(const gfx::Rect& layer_rect); // These functions are virtual for testing. virtual scoped_refptr CreateRasterSource( bool can_use_lcd_text) const; virtual bool IsSuitableForGpuRasterization() const; gfx::Rect recorded_viewport() const { return recorded_viewport_; } protected: void Clear(); gfx::Rect recorded_viewport_; gfx::Size size_; int slow_down_raster_scale_factor_for_debug_; bool generate_discardable_images_metadata_; bool requires_clear_; bool is_solid_color_; bool clear_canvas_with_debug_color_; SkColor solid_color_; SkColor background_color_; scoped_refptr display_list_; size_t painter_reported_memory_usage_; private: void UpdateInvalidationForNewViewport(const gfx::Rect& old_recorded_viewport, const gfx::Rect& new_recorded_viewport, Region* invalidation); void FinishDisplayItemListUpdate(); friend class DisplayListRasterSource; void DetermineIfSolidColor(); InvalidationRegion invalidation_; DISALLOW_COPY_AND_ASSIGN(DisplayListRecordingSource); }; } // namespace cc #endif // CC_PLAYBACK_DISPLAY_LIST_RECORDING_SOURCE_H_