layer_cache_ &= ~kForceClear;
layer_cache_ &= ~kDisplayFrameRectChanged;
layer_cache_ &= ~kSourceRectChanged;
+
+ // From observation: In Android, when the source crop doesn't
+ // begin from (0, 0) the surface damage is already translated
+ // to global display co-ordinates
if (!surface_damage_.empty() &&
- (display_frame_width_ < DAMAGE_THRESHOLD &&
- display_frame_height_ < DAMAGE_THRESHOLD)) {
- layer_cache_ |= kForceClear;
- current_rendering_damage_ = display_frame_;
+ ((source_crop_.left == 0) && (source_crop_.top == 0))) {
+ if (display_frame_width_ < DAMAGE_THRESHOLD &&
+ display_frame_height_ < DAMAGE_THRESHOLD) {
+ layer_cache_ |= kForceClear;
+ current_rendering_damage_ = display_frame_;
+ }
+ current_rendering_damage_.left =
+ surface_damage_.left + display_frame_.left;
+ current_rendering_damage_.top = surface_damage_.top + display_frame_.top;
+ current_rendering_damage_.right =
+ surface_damage_.right + display_frame_.left;
+ current_rendering_damage_.bottom =
+ surface_damage_.bottom + display_frame_.top;
} else {
current_rendering_damage_ = surface_damage_;
}
}
surface_damage_ = layer->GetLayerDamage();
- // In case of layer using blending we need to force partial clear. Otherwise
- // we see content not getting updated correctly. For example:
- // on Android enable, settings put system user_rotation 1 and
- // navigate to settings on Android.
- if (((blending_ != HWCBlending::kBlendingNone) && !surface_damage_.empty())) {
- state_ |= kForcePartialClear;
- surface_damage_ = layer->GetDisplayFrame();
- }
SetBuffer(layer->GetNativeHandle(), layer->GetAcquireFence(),
resource_manager, true);