Index: cc/layers/picture_layer.cc |
diff --git a/cc/layers/picture_layer.cc b/cc/layers/picture_layer.cc |
index dee9a78bc950e185644ed90e3b3bdb17fd6538c5..5827af27eb531a722bdafe51755c40674dbf16e2 100644 |
--- a/cc/layers/picture_layer.cc |
+++ b/cc/layers/picture_layer.cc |
@@ -20,7 +20,7 @@ PictureLayer::PictureLayer(ContentLayerClient* client) |
pile_(make_scoped_refptr(new PicturePile())), |
instrumentation_object_tracker_(id()), |
is_mask_(false), |
- has_gpu_rasterization_hint_(false), |
+ has_gpu_rasterization_hint_(TRIBOOL_UNKNOWN), |
update_source_frame_number_(-1) {} |
PictureLayer::~PictureLayer() { |
@@ -50,7 +50,7 @@ void PictureLayer::PushPropertiesTo(LayerImpl* base_layer) { |
} |
layer_impl->SetIsMask(is_mask_); |
- layer_impl->SetHasGpuRasterizationHint(has_gpu_rasterization_hint_); |
+ layer_impl->SetUseGpuRasterization(ShouldUseGpuRasterization()); |
// Unlike other properties, invalidation must always be set on layer_impl. |
// See PictureLayerImpl::PushPropertiesTo for more details. |
@@ -138,11 +138,34 @@ void PictureLayer::SetIsMask(bool is_mask) { |
} |
void PictureLayer::SetHasGpuRasterizationHint(bool has_hint) { |
- DCHECK(IsPropertyChangeAllowed()); |
- if (has_gpu_rasterization_hint_ == has_hint) |
- return; |
- has_gpu_rasterization_hint_ = has_hint; |
- SetNeedsCommit(); |
+ switch (has_gpu_rasterization_hint_) { |
+ case TRIBOOL_UNKNOWN: // Fall-through. |
+ case TRIBOOL_TRUE: |
+ has_gpu_rasterization_hint_ = has_hint ? TRIBOOL_TRUE : TRIBOOL_FALSE; |
enne (OOO)
2014/04/04 19:40:07
In other words, keep this function the same as bef
|
+ break; |
+ case TRIBOOL_FALSE: |
+ // GPU rasterization cannot be enabled once disabled. |
+ // This is done to prevent frequent invalidations and visual flashing. |
+ break; |
+ default: |
+ NOTREACHED(); |
+ } |
+ // No need to commit immediately. |
+ // This flag will be pushed with the next commit. |
+} |
+ |
+bool PictureLayer::ShouldUseGpuRasterization() const { |
+ switch (layer_tree_host()->settings().rasterization_site) { |
+ case LayerTreeSettings::CpuRasterization: |
+ return false; |
+ case LayerTreeSettings::HybridRasterization: |
+ return has_gpu_rasterization_hint_ == TRIBOOL_TRUE && |
enne (OOO)
2014/04/04 19:40:07
...and just say has_gpu_rasterization_hint_ && pil
alokp
2014/04/04 21:53:46
I do not think there is any redundancy. Both the f
|
+ pile_->is_suitable_for_gpu_rasterization(); |
+ case LayerTreeSettings::GpuRasterization: |
+ return true; |
+ } |
+ NOTREACHED(); |
+ return false; |
} |
bool PictureLayer::SupportsLCDText() const { |