Merge "hwc2: Avoid overwriting metadata refresh rate."
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
commit
269e170176
@@ -596,11 +596,10 @@ void HWCDisplay::BuildLayerStack() {
|
|||||||
layer->src_rect.bottom = layer_buffer->height;
|
layer->src_rect.bottom = layer_buffer->height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (layer->frame_rate > metadata_refresh_rate_) {
|
if (hwc_layer->HasMetaDataRefreshRate() && layer->frame_rate > metadata_refresh_rate_) {
|
||||||
metadata_refresh_rate_ = SanitizeRefreshRate(layer->frame_rate);
|
metadata_refresh_rate_ = SanitizeRefreshRate(layer->frame_rate);
|
||||||
} else {
|
|
||||||
layer->frame_rate = current_refresh_rate_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
display_rect_ = Union(display_rect_, layer->dst_rect);
|
display_rect_ = Union(display_rect_, layer->dst_rect);
|
||||||
geometry_changes_ |= hwc_layer->GetGeometryChanges();
|
geometry_changes_ |= hwc_layer->GetGeometryChanges();
|
||||||
|
|
||||||
@@ -1051,6 +1050,7 @@ HWC2::Error HWCDisplay::PrepareLayerStack(uint32_t *out_num_types, uint32_t *out
|
|||||||
return HWC2::Error::BadDisplay;
|
return HWC2::Error::BadDisplay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UpdateRefreshRate();
|
||||||
if (!skip_prepare_) {
|
if (!skip_prepare_) {
|
||||||
DisplayError error = display_intf_->Prepare(&layer_stack_);
|
DisplayError error = display_intf_->Prepare(&layer_stack_);
|
||||||
if (error != kErrorNone) {
|
if (error != kErrorNone) {
|
||||||
@@ -2135,4 +2135,14 @@ bool HWCDisplay::CanSkipValidate() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HWCDisplay::UpdateRefreshRate() {
|
||||||
|
for (auto hwc_layer : layer_set_) {
|
||||||
|
if (hwc_layer->HasMetaDataRefreshRate()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto layer = hwc_layer->GetSDMLayer();
|
||||||
|
layer->frame_rate = current_refresh_rate_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace sdm
|
} // namespace sdm
|
||||||
|
|||||||
@@ -311,6 +311,7 @@ class HWCDisplay : public DisplayEventHandler {
|
|||||||
private:
|
private:
|
||||||
void DumpInputBuffers(void);
|
void DumpInputBuffers(void);
|
||||||
bool CanSkipValidate();
|
bool CanSkipValidate();
|
||||||
|
void UpdateRefreshRate();
|
||||||
qService::QService *qservice_ = NULL;
|
qService::QService *qservice_ = NULL;
|
||||||
DisplayClass display_class_;
|
DisplayClass display_class_;
|
||||||
uint32_t geometry_changes_ = GeometryChanges::kNone;
|
uint32_t geometry_changes_ = GeometryChanges::kNone;
|
||||||
|
|||||||
@@ -735,6 +735,7 @@ DisplayError HWCLayer::SetMetaData(const private_handle_t *pvt_handle, Layer *la
|
|||||||
uint32_t frame_rate = layer->frame_rate;
|
uint32_t frame_rate = layer->frame_rate;
|
||||||
if (getMetaData(handle, GET_REFRESH_RATE, &fps) == 0) {
|
if (getMetaData(handle, GET_REFRESH_RATE, &fps) == 0) {
|
||||||
frame_rate = (fps != 0) ? RoundToStandardFPS(fps) : layer->frame_rate;
|
frame_rate = (fps != 0) ? RoundToStandardFPS(fps) : layer->frame_rate;
|
||||||
|
has_metadata_refresh_rate_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t interlaced = 0;
|
int32_t interlaced = 0;
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ class HWCLayer {
|
|||||||
bool IsScalingPresent();
|
bool IsScalingPresent();
|
||||||
bool IsRotationPresent();
|
bool IsRotationPresent();
|
||||||
bool IsNonIntegralSourceCrop() { return non_integral_source_crop_; }
|
bool IsNonIntegralSourceCrop() { return non_integral_source_crop_; }
|
||||||
|
bool HasMetaDataRefreshRate() { return has_metadata_refresh_rate_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Layer *layer_ = nullptr;
|
Layer *layer_ = nullptr;
|
||||||
@@ -115,6 +116,7 @@ class HWCLayer {
|
|||||||
bool single_buffer_ = false;
|
bool single_buffer_ = false;
|
||||||
int buffer_fd_ = -1;
|
int buffer_fd_ = -1;
|
||||||
bool non_integral_source_crop_ = false;
|
bool non_integral_source_crop_ = false;
|
||||||
|
bool has_metadata_refresh_rate_ = false;
|
||||||
|
|
||||||
// Composition requested by client(SF)
|
// Composition requested by client(SF)
|
||||||
HWC2::Composition client_requested_ = HWC2::Composition::Device;
|
HWC2::Composition client_requested_ = HWC2::Composition::Device;
|
||||||
|
|||||||
Reference in New Issue
Block a user