Merge "SurfaceFlinger: track the HWC retire fences"
This commit is contained in:
commit
e64b38fad2
@ -419,6 +419,11 @@ nsecs_t HWComposer::getRefreshTimestamp(int disp) const {
|
|||||||
return now - ((now - mLastHwVSync) % mDisplayData[disp].refresh);
|
return now - ((now - mLastHwVSync) % mDisplayData[disp].refresh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sp<Fence> HWComposer::getDisplayFence(int disp) const {
|
||||||
|
return mDisplayData[disp].lastDisplayFence;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
uint32_t HWComposer::getWidth(int disp) const {
|
uint32_t HWComposer::getWidth(int disp) const {
|
||||||
return mDisplayData[disp].width;
|
return mDisplayData[disp].width;
|
||||||
}
|
}
|
||||||
@ -663,9 +668,11 @@ status_t HWComposer::commit() {
|
|||||||
|
|
||||||
for (size_t i=0 ; i<mNumDisplays ; i++) {
|
for (size_t i=0 ; i<mNumDisplays ; i++) {
|
||||||
DisplayData& disp(mDisplayData[i]);
|
DisplayData& disp(mDisplayData[i]);
|
||||||
|
disp.lastDisplayFence = disp.lastRetireFence;
|
||||||
|
disp.lastRetireFence = NULL;
|
||||||
if (disp.list) {
|
if (disp.list) {
|
||||||
if (disp.list->retireFenceFd != -1) {
|
if (disp.list->retireFenceFd != -1) {
|
||||||
close(disp.list->retireFenceFd);
|
disp.lastRetireFence = new Fence(disp.list->retireFenceFd);
|
||||||
disp.list->retireFenceFd = -1;
|
disp.list->retireFenceFd = -1;
|
||||||
}
|
}
|
||||||
disp.list->flags &= ~HWC_GEOMETRY_CHANGED;
|
disp.list->flags &= ~HWC_GEOMETRY_CHANGED;
|
||||||
|
@ -22,13 +22,15 @@
|
|||||||
|
|
||||||
#include <hardware/hwcomposer_defs.h>
|
#include <hardware/hwcomposer_defs.h>
|
||||||
|
|
||||||
|
#include <ui/Fence.h>
|
||||||
|
|
||||||
|
#include <utils/BitSet.h>
|
||||||
#include <utils/Condition.h>
|
#include <utils/Condition.h>
|
||||||
#include <utils/Mutex.h>
|
#include <utils/Mutex.h>
|
||||||
#include <utils/StrongPointer.h>
|
#include <utils/StrongPointer.h>
|
||||||
#include <utils/Thread.h>
|
#include <utils/Thread.h>
|
||||||
#include <utils/Timers.h>
|
#include <utils/Timers.h>
|
||||||
#include <utils/Vector.h>
|
#include <utils/Vector.h>
|
||||||
#include <utils/BitSet.h>
|
|
||||||
|
|
||||||
extern "C" int clock_nanosleep(clockid_t clock_id, int flags,
|
extern "C" int clock_nanosleep(clockid_t clock_id, int flags,
|
||||||
const struct timespec *request,
|
const struct timespec *request,
|
||||||
@ -233,6 +235,7 @@ public:
|
|||||||
// HWC_DISPLAY_PRIMARY).
|
// HWC_DISPLAY_PRIMARY).
|
||||||
nsecs_t getRefreshPeriod(int disp) const;
|
nsecs_t getRefreshPeriod(int disp) const;
|
||||||
nsecs_t getRefreshTimestamp(int disp) const;
|
nsecs_t getRefreshTimestamp(int disp) const;
|
||||||
|
sp<Fence> getDisplayFence(int disp) const;
|
||||||
uint32_t getWidth(int disp) const;
|
uint32_t getWidth(int disp) const;
|
||||||
uint32_t getHeight(int disp) const;
|
uint32_t getHeight(int disp) const;
|
||||||
uint32_t getFormat(int disp) const;
|
uint32_t getFormat(int disp) const;
|
||||||
@ -306,6 +309,10 @@ private:
|
|||||||
hwc_display_contents_1* list;
|
hwc_display_contents_1* list;
|
||||||
hwc_layer_1* framebufferTarget;
|
hwc_layer_1* framebufferTarget;
|
||||||
buffer_handle_t fbTargetHandle;
|
buffer_handle_t fbTargetHandle;
|
||||||
|
sp<Fence> lastRetireFence; // signals when the last set op retires
|
||||||
|
sp<Fence> lastDisplayFence; // signals when the last set op takes
|
||||||
|
// effect on screen
|
||||||
|
|
||||||
// protected by mEventControlLock
|
// protected by mEventControlLock
|
||||||
int32_t events;
|
int32_t events;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user