Merge "inputflinger: 64-bit compile issues"
diff --git a/cmds/installd/commands.c b/cmds/installd/commands.c
index 8911570..3930224 100644
--- a/cmds/installd/commands.c
+++ b/cmds/installd/commands.c
@@ -622,12 +622,11 @@
const char* output_file_name, const char *pkgname, const char *instruction_set)
{
char dex2oat_flags[PROPERTY_VALUE_MAX];
- property_get("dalvik.vm.dex2oat-flags", dex2oat_flags, "");
+ bool have_dex2oat_flags = property_get("dalvik.vm.dex2oat-flags", dex2oat_flags, NULL) > 0;
ALOGV("dalvik.vm.dex2oat-flags=%s\n", dex2oat_flags);
- char profiler_prop[PROPERTY_VALUE_MAX];
- bool profiler = property_get("dalvik.vm.profiler", profiler_prop, "0")
- && (profiler_prop[0] == '1');
+ char prop_buf[PROPERTY_VALUE_MAX];
+ bool profiler = (property_get("dalvik.vm.profiler", prop_buf, "0") > 0) && (prop_buf[0] == '1');
static const char* DEX2OAT_BIN = "/system/bin/dex2oat";
static const int MAX_INT_LEN = 12; // '-'+10dig+'\0' -OR- 0x+8dig
@@ -643,8 +642,9 @@
char zip_location_arg[strlen("--zip-location=") + PKG_PATH_MAX];
char oat_fd_arg[strlen("--oat-fd=") + MAX_INT_LEN];
char oat_location_arg[strlen("--oat-name=") + PKG_PATH_MAX];
- char profile_file_arg[strlen("--profile-file=") + PKG_PATH_MAX];
char instruction_set_arg[strlen("--instruction-set=") + MAX_INSTRUCTION_SET_LEN];
+ char profile_file_arg[strlen("--profile-file=") + PKG_PATH_MAX];
+ char top_k_profile_threshold_arg[strlen("--top-k-profile-threshold=") + PROPERTY_VALUE_MAX];
sprintf(zip_fd_arg, "--zip-fd=%d", zip_fd);
sprintf(zip_location_arg, "--zip-location=%s", input_file_name);
@@ -652,27 +652,49 @@
sprintf(oat_location_arg, "--oat-location=%s", output_file_name);
sprintf(instruction_set_arg, "--instruction-set=%s", instruction_set);
+ bool have_profile_file = false;
+ bool have_top_k_profile_threshold = false;
if (profiler && (strcmp(pkgname, "*") != 0)) {
char profile_file[PKG_PATH_MAX];
snprintf(profile_file, sizeof(profile_file), "%s/%s",
DALVIK_CACHE_PREFIX "profiles", pkgname);
struct stat st;
- if (stat(profile_file, &st) == -1) {
- strcpy(profile_file_arg, "--no-profile-file");
- } else {
+ if ((stat(profile_file, &st) == 0) && (st.st_size > 0)) {
sprintf(profile_file_arg, "--profile-file=%s", profile_file);
+ have_profile_file = true;
+ if (property_get("dalvik.vm.profile.top-k-thr", prop_buf, NULL) > 0) {
+ snprintf(top_k_profile_threshold_arg, sizeof(top_k_profile_threshold_arg),
+ "--top-k-profile-threshold=%s", prop_buf);
+ have_top_k_profile_threshold = true;
+ }
}
- } else {
- strcpy(profile_file_arg, "--no-profile-file");
}
ALOGV("Running %s in=%s out=%s\n", DEX2OAT_BIN, input_file_name, output_file_name);
- execl(DEX2OAT_BIN, DEX2OAT_BIN,
- zip_fd_arg, zip_location_arg,
- oat_fd_arg, oat_location_arg,
- profile_file_arg, instruction_set_arg,
- strlen(dex2oat_flags) > 0 ? dex2oat_flags : NULL,
- (char*) NULL);
+
+ char* argv[7 // program name, mandatory arguments and the final NULL
+ + (have_profile_file ? 1 : 0)
+ + (have_top_k_profile_threshold ? 1 : 0)
+ + (have_dex2oat_flags ? 1 : 0)];
+ int i = 0;
+ argv[i++] = (char*)DEX2OAT_BIN;
+ argv[i++] = zip_fd_arg;
+ argv[i++] = zip_location_arg;
+ argv[i++] = oat_fd_arg;
+ argv[i++] = oat_location_arg;
+ argv[i++] = instruction_set_arg;
+ if (have_profile_file) {
+ argv[i++] = profile_file_arg;
+ }
+ if (have_top_k_profile_threshold) {
+ argv[i++] = top_k_profile_threshold_arg;
+ }
+ if (have_dex2oat_flags) {
+ argv[i++] = dex2oat_flags;
+ }
+ argv[i] = NULL;
+
+ execv(DEX2OAT_BIN, (char* const *)argv);
ALOGE("execl(%s) failed: %s\n", DEX2OAT_BIN, strerror(errno));
}
diff --git a/libs/gui/BitTube.cpp b/libs/gui/BitTube.cpp
index 85a7de7..0282834 100644
--- a/libs/gui/BitTube.cpp
+++ b/libs/gui/BitTube.cpp
@@ -145,7 +145,7 @@
// should never happen because of SOCK_SEQPACKET
LOG_ALWAYS_FATAL_IF((size >= 0) && (size % objSize),
- "BitTube::sendObjects(count=%d, size=%d), res=%d (partial events were sent!)",
+ "BitTube::sendObjects(count=%zu, size=%zu), res=%zd (partial events were sent!)",
count, objSize, size);
//ALOGE_IF(size<0, "error %d sending %d events", size, count);
@@ -160,7 +160,7 @@
// should never happen because of SOCK_SEQPACKET
LOG_ALWAYS_FATAL_IF((size >= 0) && (size % objSize),
- "BitTube::recvObjects(count=%d, size=%d), res=%d (partial events were received!)",
+ "BitTube::recvObjects(count=%zu, size=%zu), res=%zd (partial events were received!)",
count, objSize, size);
//ALOGE_IF(size<0, "error %d receiving %d events", size, count);
diff --git a/libs/gui/ConsumerBase.cpp b/libs/gui/ConsumerBase.cpp
index f1b8fa8..f19b6c7 100644
--- a/libs/gui/ConsumerBase.cpp
+++ b/libs/gui/ConsumerBase.cpp
@@ -14,6 +14,8 @@
* limitations under the License.
*/
+#include <inttypes.h>
+
#define LOG_TAG "ConsumerBase"
#define ATRACE_TAG ATRACE_TAG_GRAPHICS
//#define LOG_NDEBUG 0
@@ -191,7 +193,7 @@
mSlots[item->mBuf].mFrameNumber = item->mFrameNumber;
mSlots[item->mBuf].mFence = item->mFence;
- CB_LOGV("acquireBufferLocked: -> slot=%d/%llu",
+ CB_LOGV("acquireBufferLocked: -> slot=%d/%" PRIu64,
item->mBuf, item->mFrameNumber);
return OK;
@@ -242,7 +244,7 @@
return OK;
}
- CB_LOGV("releaseBufferLocked: slot=%d/%llu",
+ CB_LOGV("releaseBufferLocked: slot=%d/%" PRIu64,
slot, mSlots[slot].mFrameNumber);
status_t err = mConsumer->releaseBuffer(slot, mSlots[slot].mFrameNumber,
display, eglFence, mSlots[slot].mFence);
diff --git a/libs/input/InputTransport.cpp b/libs/input/InputTransport.cpp
index 21fd443..090ee53 100644
--- a/libs/input/InputTransport.cpp
+++ b/libs/input/InputTransport.cpp
@@ -301,7 +301,7 @@
"action=0x%x, flags=0x%x, edgeFlags=0x%x, metaState=0x%x, buttonState=0x%x, "
"xOffset=%f, yOffset=%f, "
"xPrecision=%f, yPrecision=%f, downTime=%lld, eventTime=%lld, "
- "pointerCount=%d",
+ "pointerCount=%" PRIu32,
mChannel->getName().string(), seq,
deviceId, source, action, flags, edgeFlags, metaState, buttonState,
xOffset, yOffset, xPrecision, yPrecision, downTime, eventTime, pointerCount);
@@ -313,7 +313,7 @@
}
if (pointerCount > MAX_POINTERS || pointerCount < 1) {
- ALOGE("channel '%s' publisher ~ Invalid number of pointers provided: %"PRIu32".",
+ ALOGE("channel '%s' publisher ~ Invalid number of pointers provided: %" PRIu32 ".",
mChannel->getName().string(), pointerCount);
return BAD_VALUE;
}
diff --git a/opengl/tests/hwc/Android.mk b/opengl/tests/hwc/Android.mk
index 2fdfcf8..86e1d46 100644
--- a/opengl/tests/hwc/Android.mk
+++ b/opengl/tests/hwc/Android.mk
@@ -57,7 +57,6 @@
LOCAL_CFLAGS := -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES
LOCAL_MODULE:= hwcStress
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)/nativestresstest
LOCAL_MODULE_TAGS := tests
@@ -88,7 +87,6 @@
$(call include-path-for, opengl-tests-includes)
LOCAL_MODULE:= hwcRects
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)/nativeutil
LOCAL_MODULE_TAGS := tests
@@ -119,7 +117,6 @@
$(call include-path-for, opengl-tests-includes)
LOCAL_MODULE:= hwcColorEquiv
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)/nativeutil
LOCAL_MODULE_TAGS := tests
@@ -150,7 +147,6 @@
$(call include-path-for, opengl-tests-includes)
LOCAL_MODULE:= hwcCommit
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)/nativebenchmark
LOCAL_MODULE_TAGS := tests
diff --git a/services/surfaceflinger/Android.mk b/services/surfaceflinger/Android.mk
index 0834c80..56c539f 100644
--- a/services/surfaceflinger/Android.mk
+++ b/services/surfaceflinger/Android.mk
@@ -37,9 +37,6 @@
LOCAL_CFLAGS:= -DLOG_TAG=\"SurfaceFlinger\"
LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES
-ifeq ($(TARGET_BOARD_PLATFORM),omap3)
- LOCAL_CFLAGS += -DNO_RGBX_8888
-endif
ifeq ($(TARGET_BOARD_PLATFORM),omap4)
LOCAL_CFLAGS += -DHAS_CONTEXT_PRIORITY
endif
diff --git a/services/surfaceflinger/DispSync.cpp b/services/surfaceflinger/DispSync.cpp
index d771e2c..12da9a5 100644
--- a/services/surfaceflinger/DispSync.cpp
+++ b/services/surfaceflinger/DispSync.cpp
@@ -37,34 +37,23 @@
// Setting this to true enables verbose tracing that can be used to debug
// vsync event model or phase issues.
-static const bool traceDetailedInfo = false;
+static const bool kTraceDetailedInfo = false;
// This is the threshold used to determine when hardware vsync events are
// needed to re-synchronize the software vsync model with the hardware. The
// error metric used is the mean of the squared difference between each
// present time and the nearest software-predicted vsync.
-static const nsecs_t errorThreshold = 160000000000;
-
-// This works around the lack of support for the sync framework on some
-// devices.
-#ifdef RUNNING_WITHOUT_SYNC_FRAMEWORK
-static const bool runningWithoutSyncFramework = true;
-#else
-static const bool runningWithoutSyncFramework = false;
-#endif
+static const nsecs_t kErrorThreshold = 160000000000; // 400 usec squared
// This is the offset from the present fence timestamps to the corresponding
// vsync event.
-static const int64_t presentTimeOffset = PRESENT_TIME_OFFSET_FROM_VSYNC_NS;
+static const int64_t kPresentTimeOffset = PRESENT_TIME_OFFSET_FROM_VSYNC_NS;
class DispSyncThread: public Thread {
public:
DispSyncThread():
- mLowPowerMode(false),
mStop(false),
- mLastVsyncSent(false),
- mLastBufferFull(false),
mPeriod(0),
mPhase(0),
mWakeupLatency(0) {
@@ -138,7 +127,7 @@
// Don't correct by more than 500 us
mWakeupLatency = 500000;
}
- if (traceDetailedInfo) {
+ if (kTraceDetailedInfo) {
ATRACE_INT64("DispSync:WakeupLat", now - nextEventTime);
ATRACE_INT64("DispSync:AvgWakeupLat", mWakeupLatency);
}
@@ -148,18 +137,7 @@
}
if (callbackInvocations.size() > 0) {
- if (mLowPowerMode) {
- if (!mLastVsyncSent || !mLastBufferFull) {
- fireCallbackInvocations(callbackInvocations);
- mLastVsyncSent = true;
- } else
- mLastVsyncSent = false;
- } else {
- fireCallbackInvocations(callbackInvocations);
- }
- mLastBufferFull = true;
- } else {
- mLastBufferFull = false;
+ fireCallbackInvocations(callbackInvocations);
}
}
@@ -207,14 +185,12 @@
return BAD_VALUE;
}
- // This method is only here to handle the runningWithoutSyncFramework
- // case.
+ // This method is only here to handle the kIgnorePresentFences case.
bool hasAnyEventListeners() {
Mutex::Autolock lock(mMutex);
return !mEventListeners.empty();
}
- bool mLowPowerMode;
private:
struct EventListener {
@@ -287,8 +263,6 @@
}
bool mStop;
- bool mLastVsyncSent;
- bool mLastBufferFull;
nsecs_t mPeriod;
nsecs_t mPhase;
@@ -313,19 +287,22 @@
bool mParity;
};
-DispSync::DispSync() {
- mThread = new DispSyncThread();
+DispSync::DispSync() :
+ mRefreshSkipCount(0),
+ mThread(new DispSyncThread()) {
+
mThread->run("DispSync", PRIORITY_URGENT_DISPLAY + PRIORITY_MORE_FAVORABLE);
reset();
beginResync();
- if (traceDetailedInfo) {
- // If runningWithoutSyncFramework is true then the ZeroPhaseTracer
+ if (kTraceDetailedInfo) {
+ // If we're not getting present fences then the ZeroPhaseTracer
// would prevent HW vsync event from ever being turned off.
- // Furthermore the zero-phase tracing is not needed because any time
- // there is an event registered we will turn on the HW vsync events.
- if (!runningWithoutSyncFramework) {
+ // Even if we're just ignoring the fences, the zero-phase tracing is
+ // not needed because any time there is an event registered we will
+ // turn on the HW vsync events.
+ if (!kIgnorePresentFences) {
addEventListener(0, new ZeroPhaseTracer());
}
}
@@ -356,14 +333,14 @@
nsecs_t t = f->getSignalTime();
if (t < INT64_MAX) {
mPresentFences[i].clear();
- mPresentTimes[i] = t + presentTimeOffset;
+ mPresentTimes[i] = t + kPresentTimeOffset;
}
}
}
updateErrorLocked();
- return mPeriod == 0 || mError > errorThreshold;
+ return mPeriod == 0 || mError > kErrorThreshold;
}
void DispSync::beginResync() {
@@ -390,7 +367,7 @@
resetErrorLocked();
}
- if (runningWithoutSyncFramework) {
+ if (kIgnorePresentFences) {
// If we don't have the sync framework we will never have
// addPresentFence called. This means we have no way to know whether
// or not we're synchronized with the HW vsyncs, so we just request
@@ -399,7 +376,7 @@
return mThread->hasAnyEventListeners();
}
- return mPeriod == 0 || mError > errorThreshold;
+ return mPeriod == 0 || mError > kErrorThreshold;
}
void DispSync::endResync() {
@@ -412,8 +389,11 @@
return mThread->addEventListener(phase, callback);
}
-void DispSync::setLowPowerMode(bool enabled) {
- mThread->mLowPowerMode = enabled;
+void DispSync::setRefreshSkipCount(int count) {
+ Mutex::Autolock lock(mMutex);
+ ALOGD("setRefreshSkipCount(%d)", count);
+ mRefreshSkipCount = count;
+ updateModelLocked();
}
status_t DispSync::removeEventListener(const sp<Callback>& callback) {
@@ -459,11 +439,14 @@
mPhase += mPeriod;
}
- if (traceDetailedInfo) {
+ if (kTraceDetailedInfo) {
ATRACE_INT64("DispSync:Period", mPeriod);
ATRACE_INT64("DispSync:Phase", mPhase);
}
+ // Artificially inflate the period if requested.
+ mPeriod += mPeriod * mRefreshSkipCount;
+
mThread->updateModel(mPeriod, mPhase);
}
}
@@ -473,15 +456,19 @@
return;
}
+ // Need to compare present fences against the un-adjusted refresh period,
+ // since they might arrive between two events.
+ nsecs_t period = mPeriod / (1 + mRefreshSkipCount);
+
int numErrSamples = 0;
nsecs_t sqErrSum = 0;
for (size_t i = 0; i < NUM_PRESENT_SAMPLES; i++) {
nsecs_t sample = mPresentTimes[i];
if (sample > mPhase) {
- nsecs_t sampleErr = (sample - mPhase) % mPeriod;
- if (sampleErr > mPeriod / 2) {
- sampleErr -= mPeriod;
+ nsecs_t sampleErr = (sample - mPhase) % period;
+ if (sampleErr > period / 2) {
+ sampleErr -= period;
}
sqErrSum += sampleErr * sampleErr;
numErrSamples++;
@@ -494,7 +481,7 @@
mError = 0;
}
- if (traceDetailedInfo) {
+ if (kTraceDetailedInfo) {
ATRACE_INT64("DispSync:Error", mError);
}
}
@@ -516,13 +503,16 @@
void DispSync::dump(String8& result) const {
Mutex::Autolock lock(mMutex);
- result.appendFormat("mPeriod: %"PRId64" ns\n", mPeriod);
- result.appendFormat("mPhase: %"PRId64" ns\n", mPhase);
- result.appendFormat("mError: %"PRId64" ns (sqrt: %.1f)\n",
+ result.appendFormat("present fences are %s\n",
+ kIgnorePresentFences ? "ignored" : "used");
+ result.appendFormat("mPeriod: %" PRId64 " ns (%.3f fps; skipCount=%d)\n",
+ mPeriod, 1000000000.0 / mPeriod, mRefreshSkipCount);
+ result.appendFormat("mPhase: %" PRId64 " ns\n", mPhase);
+ result.appendFormat("mError: %" PRId64 " ns (sqrt=%.1f)\n",
mError, sqrt(mError));
- result.appendFormat("mNumResyncSamplesSincePresent: %d (max %d)\n",
+ result.appendFormat("mNumResyncSamplesSincePresent: %d (limit %d)\n",
mNumResyncSamplesSincePresent, MAX_RESYNC_SAMPLES_WITHOUT_PRESENT);
- result.appendFormat("mNumResyncSamples: %d (max %d)\n",
+ result.appendFormat("mNumResyncSamples: %zd (max %d)\n",
mNumResyncSamples, MAX_RESYNC_SAMPLES);
result.appendFormat("mResyncSamples:\n");
@@ -531,9 +521,9 @@
size_t idx = (mFirstResyncSample + i) % MAX_RESYNC_SAMPLES;
nsecs_t sampleTime = mResyncSamples[idx];
if (i == 0) {
- result.appendFormat(" %"PRId64"\n", sampleTime);
+ result.appendFormat(" %" PRId64 "\n", sampleTime);
} else {
- result.appendFormat(" %"PRId64" (+%"PRId64")\n",
+ result.appendFormat(" %" PRId64 " (+%" PRId64 ")\n",
sampleTime, sampleTime - previous);
}
previous = sampleTime;
@@ -541,6 +531,7 @@
result.appendFormat("mPresentFences / mPresentTimes [%d]:\n",
NUM_PRESENT_SAMPLES);
+ nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
previous = 0;
for (size_t i = 0; i < NUM_PRESENT_SAMPLES; i++) {
size_t idx = (i + mPresentSampleOffset) % NUM_PRESENT_SAMPLES;
@@ -548,15 +539,21 @@
nsecs_t presentTime = mPresentTimes[idx];
if (!signaled) {
result.appendFormat(" [unsignaled fence]\n");
+ } else if (presentTime == 0) {
+ result.appendFormat(" 0\n");
} else if (previous == 0) {
- result.appendFormat(" %"PRId64"\n", presentTime);
+ result.appendFormat(" %" PRId64 " (%.3f ms ago)\n", presentTime,
+ (now - presentTime) / 1000000.0);
} else {
- result.appendFormat(" %"PRId64" (+%"PRId64" / %.3f)\n",
+ result.appendFormat(" %" PRId64 " (+%" PRId64 " / %.3f) (%.3f ms ago)\n",
presentTime, presentTime - previous,
- (presentTime - previous) / (double) mPeriod);
+ (presentTime - previous) / (double) mPeriod,
+ (now - presentTime) / 1000000.0);
}
previous = presentTime;
}
+
+ result.appendFormat("current monotonic time: %" PRId64 "\n", now);
}
} // namespace android
diff --git a/services/surfaceflinger/DispSync.h b/services/surfaceflinger/DispSync.h
index a33ce5d..7a26df3 100644
--- a/services/surfaceflinger/DispSync.h
+++ b/services/surfaceflinger/DispSync.h
@@ -25,6 +25,18 @@
namespace android {
+// Ignore present (retire) fences if the device doesn't have support for the
+// sync framework, or if all phase offsets are zero. The latter is useful
+// because it allows us to avoid resync bursts on devices that don't need
+// phase-offset VSYNC events.
+#if defined(RUNNING_WITHOUT_SYNC_FRAMEWORK) || \
+ (VSYNC_EVENT_PHASE_OFFSET_NS == 0 && SF_VSYNC_EVENT_PHASE_OFFSET_NS == 0)
+static const bool kIgnorePresentFences = true;
+#else
+static const bool kIgnorePresentFences = false;
+#endif
+
+
class String8;
class Fence;
class DispSyncThread;
@@ -55,6 +67,7 @@
DispSync();
~DispSync();
+ // reset clears the resync samples and error value.
void reset();
// addPresentFence adds a fence for use in validating the current vsync
@@ -88,8 +101,11 @@
// turned on. It should NOT be used after that.
void setPeriod(nsecs_t period);
- // Setting the low power mode reduces the frame rate to half of the default
- void setLowPowerMode(bool enabled);
+ // setRefreshSkipCount specifies an additional number of refresh
+ // cycles to skip. For example, on a 60Hz display, a skip count of 1
+ // will result in events happening at 30Hz. Default is zero. The idea
+ // is to sacrifice smoothness for battery life.
+ void setRefreshSkipCount(int count);
// addEventListener registers a callback to be called repeatedly at the
// given phase offset from the hardware vsync events. The callback is
@@ -149,6 +165,8 @@
nsecs_t mPresentTimes[NUM_PRESENT_SAMPLES];
size_t mPresentSampleOffset;
+ int mRefreshSkipCount;
+
// mThread is the thread from which all the callbacks are called.
sp<DispSyncThread> mThread;
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 7152f93..9111dbb 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -88,14 +88,6 @@
namespace android {
-// This works around the lack of support for the sync framework on some
-// devices.
-#ifdef RUNNING_WITHOUT_SYNC_FRAMEWORK
-static const bool runningWithoutSyncFramework = true;
-#else
-static const bool runningWithoutSyncFramework = false;
-#endif
-
// This is the phase offset in nanoseconds of the software vsync event
// relative to the vsync event reported by HWComposer. The software vsync
// event is when SurfaceFlinger and Choreographer-based applications run each
@@ -322,10 +314,13 @@
class DispSyncSource : public VSyncSource, private DispSync::Callback {
public:
- DispSyncSource(DispSync* dispSync, nsecs_t phaseOffset, bool traceVsync) :
+ DispSyncSource(DispSync* dispSync, nsecs_t phaseOffset, bool traceVsync,
+ const char* label) :
mValue(0),
mPhaseOffset(phaseOffset),
mTraceVsync(traceVsync),
+ mVsyncOnLabel(String8::format("VsyncOn-%s", label)),
+ mVsyncEventLabel(String8::format("VSYNC-%s", label)),
mDispSync(dispSync) {}
virtual ~DispSyncSource() {}
@@ -340,7 +335,7 @@
ALOGE("error registering vsync callback: %s (%d)",
strerror(-err), err);
}
- ATRACE_INT("VsyncOn", 1);
+ //ATRACE_INT(mVsyncOnLabel.string(), 1);
} else {
status_t err = mDispSync->removeEventListener(
static_cast<DispSync::Callback*>(this));
@@ -348,7 +343,7 @@
ALOGE("error unregistering vsync callback: %s (%d)",
strerror(-err), err);
}
- ATRACE_INT("VsyncOn", 0);
+ //ATRACE_INT(mVsyncOnLabel.string(), 0);
}
}
@@ -366,7 +361,7 @@
if (mTraceVsync) {
mValue = (mValue + 1) % 2;
- ATRACE_INT("VSYNC", mValue);
+ ATRACE_INT(mVsyncEventLabel.string(), mValue);
}
}
@@ -379,6 +374,8 @@
const nsecs_t mPhaseOffset;
const bool mTraceVsync;
+ const String8 mVsyncOnLabel;
+ const String8 mVsyncEventLabel;
DispSync* mDispSync;
sp<VSyncSource::Callback> mCallback;
@@ -449,10 +446,10 @@
// start the EventThread
sp<VSyncSource> vsyncSrc = new DispSyncSource(&mPrimaryDispSync,
- vsyncPhaseOffsetNs, true);
+ vsyncPhaseOffsetNs, true, "app");
mEventThread = new EventThread(vsyncSrc);
sp<VSyncSource> sfVsyncSrc = new DispSyncSource(&mPrimaryDispSync,
- sfVsyncPhaseOffsetNs, false);
+ sfVsyncPhaseOffsetNs, true, "sf");
mSFEventThread = new EventThread(sfVsyncSrc);
mEventQueue.setEventThread(mSFEventThread);
@@ -858,7 +855,7 @@
}
}
- if (runningWithoutSyncFramework) {
+ if (kIgnorePresentFences) {
const sp<const DisplayDevice> hw(getDefaultDisplayDevice());
if (hw->isScreenAcquired()) {
enableHardwareVsync();
@@ -2005,19 +2002,10 @@
format = PIXEL_FORMAT_RGBA_8888;
break;
case PIXEL_FORMAT_OPAQUE:
-#ifdef NO_RGBX_8888
- format = PIXEL_FORMAT_RGB_565;
-#else
format = PIXEL_FORMAT_RGBX_8888;
-#endif
break;
}
-#ifdef NO_RGBX_8888
- if (format == PIXEL_FORMAT_RGBX_8888)
- format = PIXEL_FORMAT_RGBA_8888;
-#endif
-
*outLayer = new Layer(this, client, name, w, h, flags);
status_t err = (*outLayer)->setBuffers(w, h, format, flags);
if (err == NO_ERROR) {
@@ -2348,9 +2336,6 @@
{
static const char* config =
" [sf"
-#ifdef NO_RGBX_8888
- " NO_RGBX_8888"
-#endif
#ifdef HAS_CONTEXT_PRIORITY
" HAS_CONTEXT_PRIORITY"
#endif
@@ -2685,11 +2670,8 @@
// This is an experimental interface
// Needs to be shifted to proper binder interface when we productize
case 1016: {
- mPrimaryDispSync.setLowPowerMode(true);
- return NO_ERROR;
- }
- case 1017: {
- mPrimaryDispSync.setLowPowerMode(false);
+ n = data.readInt32();
+ mPrimaryDispSync.setRefreshSkipCount(n);
return NO_ERROR;
}
}