return HWC2::Error::None;
}
-void DrmHwcTwo::HwcDisplay::AddFenceToPresentFence(UniqueFd fd) {
- if (!fd) {
- return;
- }
-
- if (present_fence_) {
- present_fence_ = UniqueFd(
- sync_merge("dc_present", present_fence_.Get(), fd.Get()));
- } else {
- present_fence_ = std::move(fd);
- }
-}
-
-HWC2::Error DrmHwcTwo::HwcDisplay::CreateComposition(bool test) {
+HWC2::Error DrmHwcTwo::HwcDisplay::CreateComposition(AtomicCommitArgs &a_args) {
// order the layers by z-order
bool use_client_layer = false;
uint32_t client_z_order = UINT32_MAX;
i = overlay_planes.erase(i);
}
- AtomicCommitArgs a_args = {
- .test_only = test,
- .composition = composition,
- };
-
+ a_args.composition = composition;
ret = compositor_.ExecuteAtomicCommit(a_args);
if (ret) {
- if (!test)
+ if (!a_args.test_only)
ALOGE("Failed to apply the frame composition ret=%d", ret);
return HWC2::Error::BadParameter;
- } else {
- if (!test) {
- AddFenceToPresentFence(std::move(a_args.out_fence));
- }
}
return HWC2::Error::None;
}
++total_stats_.total_frames_;
- ret = CreateComposition(false);
+ AtomicCommitArgs a_args{};
+ ret = CreateComposition(a_args);
+
if (ret != HWC2::Error::None)
++total_stats_.failed_kms_present_;
if (ret != HWC2::Error::None)
return ret;
- *present_fence = present_fence_.Release();
+ *present_fence = a_args.out_fence.Release();
++frame_no_;
return HWC2::Error::None;
HwcDisplay(const HwcDisplay &) = delete;
HWC2::Error Init(std::vector<DrmPlane *> *planes);
- HWC2::Error CreateComposition(bool test);
+ HWC2::Error CreateComposition(AtomicCommitArgs &a_args);
std::vector<DrmHwcTwo::HwcLayer *> GetOrderLayersByZPos();
void ClearDisplay();
std::atomic_int flattenning_state_{ClientFlattenningState::NotRequired};
VSyncWorker flattening_vsync_worker_;
- void AddFenceToPresentFence(UniqueFd fd);
-
constexpr static size_t MATRIX_SIZE = 16;
DrmHwcTwo *hwc2_;
uint32_t layer_idx_ = 0;
std::map<hwc2_layer_t, HwcLayer> layers_;
HwcLayer client_layer_;
- UniqueFd present_fence_;
int32_t color_mode_{};
std::array<float, MATRIX_SIZE> color_transform_matrix_{};
android_color_transform_t color_transform_hint_;
bool testing_needed = !(client_start == 0 && client_size == layers.size());
+ AtomicCommitArgs a_args = {.test_only = true};
+
if (testing_needed &&
- display->CreateComposition(true) != HWC2::Error::None) {
+ display->CreateComposition(a_args) != HWC2::Error::None) {
++display->total_stats().failed_kms_validate_;
client_start = 0;
client_size = layers.size();