summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-06-22 20:11:49 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-06-22 20:11:49 +0000
commit05b755652ab5525cec8be5a3f9876384c2f83269 (patch)
treee92f25db27279e9372a286d953df51209c47eaaf
parentaec57fad0dc908019ef2ab23c9b4ae86e32a1f32 (diff)
parent801ad647015810abc856f93ff1e90bb930714ec9 (diff)
downloadnative-05b755652ab5525cec8be5a3f9876384c2f83269.tar.gz
Merge cherrypicks of [2445838, 2447382, 2447022] into oc-release
Change-Id: I99c60c8c22735c38d4f69be7da76bf1ea20e0f27
-rw-r--r--libs/gui/Android.bp2
-rw-r--r--services/surfaceflinger/DisplayHardware/HWC2.cpp6
-rw-r--r--services/surfaceflinger/DisplayHardware/HWC2.h6
-rw-r--r--services/surfaceflinger/DisplayHardware/HWComposer.cpp4
4 files changed, 16 insertions, 2 deletions
diff --git a/libs/gui/Android.bp b/libs/gui/Android.bp
index 5eafb2c173..a07726a78c 100644
--- a/libs/gui/Android.bp
+++ b/libs/gui/Android.bp
@@ -57,7 +57,7 @@ cc_library_shared {
brillo: {
cflags: ["-DHAVE_NO_SURFACE_FLINGER"],
},
- debuggable: {
+ eng: {
cppflags: [
"-UDEBUG_ONLY_CODE",
"-DDEBUG_ONLY_CODE=1",
diff --git a/services/surfaceflinger/DisplayHardware/HWC2.cpp b/services/surfaceflinger/DisplayHardware/HWC2.cpp
index 95689d9c6f..c48a28f694 100644
--- a/services/surfaceflinger/DisplayHardware/HWC2.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWC2.cpp
@@ -717,6 +717,12 @@ Error Display::presentOrValidate(uint32_t* outNumTypes, uint32_t* outNumRequests
}
return error;
}
+
+void Display::discardCommands()
+{
+ mDevice.mComposer->resetCommands();
+}
+
// For use by Device
int32_t Display::getAttribute(hwc2_config_t configId, Attribute attribute)
diff --git a/services/surfaceflinger/DisplayHardware/HWC2.h b/services/surfaceflinger/DisplayHardware/HWC2.h
index 4d9155c249..7463e3b76f 100644
--- a/services/surfaceflinger/DisplayHardware/HWC2.h
+++ b/services/surfaceflinger/DisplayHardware/HWC2.h
@@ -259,6 +259,12 @@ public:
uint32_t* outNumRequests,
android::sp<android::Fence>* outPresentFence, uint32_t* state);
+ // Most methods in this class write a command to a command buffer. The
+ // command buffer is implicitly submitted in validate, present, and
+ // presentOrValidate. This method provides a way to discard the commands,
+ // which can be used to discard stale commands.
+ void discardCommands();
+
// Other Display methods
Device& getDevice() const { return mDevice; }
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index 913c43f281..ac2dde29d4 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -460,7 +460,8 @@ status_t HWComposer::prepare(DisplayDevice& displayDevice) {
// First try to skip validate altogether if the HWC supports it.
displayData.validateWasSkipped = false;
- if (hasCapability(HWC2::Capability::SkipValidate)) {
+ if (hasCapability(HWC2::Capability::SkipValidate) &&
+ !displayData.hasClientComposition) {
sp<android::Fence> outPresentFence;
uint32_t state = UINT32_MAX;
error = hwcDisplay->presentOrValidate(&numTypes, &numRequests, &outPresentFence , &state);
@@ -620,6 +621,7 @@ status_t HWComposer::presentAndGetReleaseFences(int32_t displayId) {
auto& hwcDisplay = displayData.hwcDisplay;
if (displayData.validateWasSkipped) {
+ hwcDisplay->discardCommands();
auto error = displayData.presentError;
if (error != HWC2::Error::None) {
ALOGE("skipValidate: failed for display %d: %s (%d)",