Merge "Added -p to uptime command on header (and changed it to run always)"
diff --git a/cmds/cmd/Android.mk b/cmds/cmd/Android.mk
index d565e57..4868555 100644
--- a/cmds/cmd/Android.mk
+++ b/cmds/cmd/Android.mk
@@ -10,6 +10,8 @@
libselinux \
libbinder
+LOCAL_CFLAGS := -Wall -Werror
+
LOCAL_C_INCLUDES += \
$(JNI_H_INCLUDE)
diff --git a/cmds/cmd/cmd.cpp b/cmds/cmd/cmd.cpp
index 6511b44..48d5d4a 100644
--- a/cmds/cmd/cmd.cpp
+++ b/cmds/cmd/cmd.cpp
@@ -104,7 +104,7 @@
if (is_selinux_enabled() && seLinuxContext.size() > 0) {
String8 seLinuxContext8(seLinuxContext);
security_context_t tmp = NULL;
- int ret = getfilecon(fullPath.string(), &tmp);
+ getfilecon(fullPath.string(), &tmp);
Unique_SecurityContext context(tmp);
if (checkWrite) {
int accessGranted = selinux_check_access(seLinuxContext8.string(), context.get(),
diff --git a/libs/binder/aidl/android/content/pm/IPackageManagerNative.aidl b/libs/binder/aidl/android/content/pm/IPackageManagerNative.aidl
index 3264666..5b66b92 100644
--- a/libs/binder/aidl/android/content/pm/IPackageManagerNative.aidl
+++ b/libs/binder/aidl/android/content/pm/IPackageManagerNative.aidl
@@ -52,6 +52,6 @@
* Unknown or unknowable versions are returned as 0.
*/
- int getVersionCodeForPackage(in String packageName);
+ long getVersionCodeForPackage(in String packageName);
}
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index 0dbe786..939a209 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -543,9 +543,14 @@
{
}
+SurfaceComposerClient::SurfaceComposerClient(const sp<ISurfaceComposerClient>& client)
+ : mStatus(NO_ERROR), mClient(client)
+{
+}
+
void SurfaceComposerClient::onFirstRef() {
sp<ISurfaceComposer> sf(ComposerService::getComposerService());
- if (sf != 0) {
+ if (sf != 0 && mStatus == NO_INIT) {
auto rootProducer = mParent.promote();
sp<ISurfaceComposerClient> conn;
conn = (rootProducer != nullptr) ? sf->createScopedConnection(rootProducer) :
diff --git a/libs/gui/SurfaceControl.cpp b/libs/gui/SurfaceControl.cpp
index f6a2b8f..f5fb8ac 100644
--- a/libs/gui/SurfaceControl.cpp
+++ b/libs/gui/SurfaceControl.cpp
@@ -166,5 +166,28 @@
return mClient;
}
+void SurfaceControl::writeToParcel(Parcel* parcel)
+{
+ parcel->writeStrongBinder(ISurfaceComposerClient::asBinder(mClient->getClient()));
+ parcel->writeStrongBinder(mHandle);
+ parcel->writeStrongBinder(IGraphicBufferProducer::asBinder(mGraphicBufferProducer));
+}
+
+sp<SurfaceControl> SurfaceControl::readFromParcel(Parcel* parcel)
+{
+ sp<IBinder> client = parcel->readStrongBinder();
+ sp<IBinder> handle = parcel->readStrongBinder();
+ if (client == nullptr || handle == nullptr)
+ {
+ ALOGE("Invalid parcel");
+ return nullptr;
+ }
+ sp<IBinder> gbp;
+ parcel->readNullableStrongBinder(&gbp);
+ return new SurfaceControl(new SurfaceComposerClient(
+ interface_cast<ISurfaceComposerClient>(client)),
+ handle.get(), interface_cast<IGraphicBufferProducer>(gbp));
+}
+
// ----------------------------------------------------------------------------
}; // namespace android
diff --git a/libs/gui/include/gui/SurfaceComposerClient.h b/libs/gui/include/gui/SurfaceComposerClient.h
index 3f13946..55b96ac 100644
--- a/libs/gui/include/gui/SurfaceComposerClient.h
+++ b/libs/gui/include/gui/SurfaceComposerClient.h
@@ -52,6 +52,7 @@
friend class Composer;
public:
SurfaceComposerClient();
+ SurfaceComposerClient(const sp<ISurfaceComposerClient>& client);
SurfaceComposerClient(const sp<IGraphicBufferProducer>& parent);
virtual ~SurfaceComposerClient();
diff --git a/libs/gui/include/gui/SurfaceControl.h b/libs/gui/include/gui/SurfaceControl.h
index 384815d..1416d87 100644
--- a/libs/gui/include/gui/SurfaceControl.h
+++ b/libs/gui/include/gui/SurfaceControl.h
@@ -44,6 +44,9 @@
class SurfaceControl : public RefBase
{
public:
+ static sp<SurfaceControl> readFromParcel(Parcel* parcel);
+ void writeToParcel(Parcel* parcel);
+
static bool isValid(const sp<SurfaceControl>& surface) {
return (surface != 0) && surface->isValid();
}
diff --git a/libs/vr/libbufferhubqueue/tests/Android.bp b/libs/vr/libbufferhubqueue/tests/Android.bp
index abeb719..5eba913 100644
--- a/libs/vr/libbufferhubqueue/tests/Android.bp
+++ b/libs/vr/libbufferhubqueue/tests/Android.bp
@@ -68,6 +68,8 @@
"-DLOG_TAG=\"buffer_transport_benchmark\"",
"-DTRACE=0",
"-O2",
+ "-Wall",
+ "-Werror",
],
name: "buffer_transport_benchmark",
tags: ["optional"],
diff --git a/libs/vr/libbufferhubqueue/tests/buffer_transport_benchmark.cpp b/libs/vr/libbufferhubqueue/tests/buffer_transport_benchmark.cpp
index 658b496..d4d25b0 100644
--- a/libs/vr/libbufferhubqueue/tests/buffer_transport_benchmark.cpp
+++ b/libs/vr/libbufferhubqueue/tests/buffer_transport_benchmark.cpp
@@ -34,7 +34,6 @@
static const String16 kBinderService = String16("bufferTransport");
static const uint32_t kBufferWidth = 100;
static const uint32_t kBufferHeight = 1;
-static const uint32_t kBufferLayerCount = 1;
static const uint32_t kBufferFormat = HAL_PIXEL_FORMAT_BLOB;
static const uint64_t kBufferUsage =
GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN;
@@ -75,10 +74,9 @@
private:
struct FrameListener : public ConsumerBase::FrameAvailableListener {
public:
- FrameListener(BufferTransportService* service,
+ FrameListener(BufferTransportService* /*service*/,
sp<BufferItemConsumer> buffer_item_consumer)
- : service_(service),
- buffer_item_consumer_(buffer_item_consumer) {}
+ : buffer_item_consumer_(buffer_item_consumer) {}
void onFrameAvailable(const BufferItem& /*item*/) override {
BufferItem buffer;
@@ -106,7 +104,6 @@
}
private:
- BufferTransportService* service_ = nullptr;
sp<BufferItemConsumer> buffer_item_consumer_;
};
diff --git a/libs/vr/libdvr/tests/dvr_named_buffer-test.cpp b/libs/vr/libdvr/tests/dvr_named_buffer-test.cpp
index c21deb0..5c837e7 100644
--- a/libs/vr/libdvr/tests/dvr_named_buffer-test.cpp
+++ b/libs/vr/libdvr/tests/dvr_named_buffer-test.cpp
@@ -5,7 +5,6 @@
#include <dvr/dvr_surface.h>
#include <system/graphics.h>
-#include <base/logging.h>
#include <gtest/gtest.h>
namespace android {
@@ -22,7 +21,7 @@
DvrBuffer* buffer2 = nullptr;
int ret2 = dvrSetupGlobalBuffer(buffer_key, 10, 0, &buffer2);
- ASSERT_EQ(0, ret1);
+ ASSERT_EQ(0, ret2);
ASSERT_NE(nullptr, buffer2);
AHardwareBuffer* hardware_buffer1 = nullptr;
@@ -159,7 +158,7 @@
ASSERT_EQ(0, e3);
ASSERT_NE(nullptr, buffer);
// Verify that the buffer pointer is at least 16 byte aligned.
- ASSERT_EQ(0, reinterpret_cast<uintptr_t>(buffer) & (16 - 1));
+ ASSERT_EQ(0U, reinterpret_cast<uintptr_t>(buffer) & (16 - 1));
uint64_t* data = static_cast<uint64_t*>(buffer);
constexpr size_t num_values = size / sizeof(uint64_t);
@@ -192,7 +191,7 @@
ASSERT_EQ(0, e3);
ASSERT_NE(nullptr, buffer);
// Verify that the buffer pointer is at least 16 byte aligned.
- ASSERT_EQ(0, reinterpret_cast<uintptr_t>(buffer) & (16 - 1));
+ ASSERT_EQ(0U, reinterpret_cast<uintptr_t>(buffer) & (16 - 1));
uint64_t* data = static_cast<uint64_t*>(buffer);
constexpr size_t num_values = size / sizeof(uint64_t);
@@ -233,7 +232,7 @@
ASSERT_EQ(0, e3);
ASSERT_NE(nullptr, buffer);
// Verify that the buffer pointer is at least 16 byte aligned.
- ASSERT_EQ(0, reinterpret_cast<uintptr_t>(buffer) & (16 - 1));
+ ASSERT_EQ(0U, reinterpret_cast<uintptr_t>(buffer) & (16 - 1));
uint64_t* data = static_cast<uint64_t*>(buffer);
constexpr size_t num_values = size / sizeof(uint64_t);
@@ -241,7 +240,7 @@
for (size_t i = 0; i < num_values; ++i) {
zero |= data[i];
}
- ASSERT_EQ(0, zero);
+ ASSERT_EQ(0U, zero);
int32_t fence = -1;
int e4 = AHardwareBuffer_unlock(hardware_buffer, &fence);
diff --git a/services/surfaceflinger/Effects/Daltonizer.cpp b/services/surfaceflinger/Effects/Daltonizer.cpp
index c953c68..01c9c0f 100644
--- a/services/surfaceflinger/Effects/Daltonizer.cpp
+++ b/services/surfaceflinger/Effects/Daltonizer.cpp
@@ -133,8 +133,6 @@
0.7, 0.7, 1.0, 0,
0, 0, 0, 1);
- const mat4 identity;
-
// And the magic happens here...
// We construct the matrix that will perform the whole correction.
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 2a4abcb..298f597 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -1616,14 +1616,25 @@
return mDrawingState.z;
}
+bool Layer::usingRelativeZ(LayerVector::StateSet stateSet) {
+ const bool useDrawing = stateSet == LayerVector::StateSet::Drawing;
+ const State& state = useDrawing ? mDrawingState : mCurrentState;
+ return state.zOrderRelativeOf != nullptr;
+}
+
__attribute__((no_sanitize("unsigned-integer-overflow"))) LayerVector Layer::makeTraversalList(
- LayerVector::StateSet stateSet) {
+ LayerVector::StateSet stateSet, bool* outSkipRelativeZUsers) {
LOG_ALWAYS_FATAL_IF(stateSet == LayerVector::StateSet::Invalid,
"makeTraversalList received invalid stateSet");
const bool useDrawing = stateSet == LayerVector::StateSet::Drawing;
const LayerVector& children = useDrawing ? mDrawingChildren : mCurrentChildren;
const State& state = useDrawing ? mDrawingState : mCurrentState;
+ if (state.zOrderRelatives.size() == 0) {
+ *outSkipRelativeZUsers = true;
+ return children;
+ }
+
LayerVector traverse;
for (const wp<Layer>& weakRelative : state.zOrderRelatives) {
sp<Layer> strongRelative = weakRelative.promote();
@@ -1647,19 +1658,35 @@
* Negatively signed relatives are before 'this' in Z-order.
*/
void Layer::traverseInZOrder(LayerVector::StateSet stateSet, const LayerVector::Visitor& visitor) {
- LayerVector list = makeTraversalList(stateSet);
+ // In the case we have other layers who are using a relative Z to us, makeTraversalList will
+ // produce a new list for traversing, including our relatives, and not including our children
+ // who are relatives of another surface. In the case that there are no relative Z,
+ // makeTraversalList returns our children directly to avoid significant overhead.
+ // However in this case we need to take the responsibility for filtering children which
+ // are relatives of another surface here.
+ bool skipRelativeZUsers = false;
+ const LayerVector list = makeTraversalList(stateSet, &skipRelativeZUsers);
size_t i = 0;
for (; i < list.size(); i++) {
const auto& relative = list[i];
+ if (skipRelativeZUsers && relative->usingRelativeZ(stateSet)) {
+ continue;
+ }
+
if (relative->getZ() >= 0) {
break;
}
relative->traverseInZOrder(stateSet, visitor);
}
+
visitor(this);
for (; i < list.size(); i++) {
const auto& relative = list[i];
+
+ if (skipRelativeZUsers && relative->usingRelativeZ(stateSet)) {
+ continue;
+ }
relative->traverseInZOrder(stateSet, visitor);
}
}
@@ -1669,11 +1696,18 @@
*/
void Layer::traverseInReverseZOrder(LayerVector::StateSet stateSet,
const LayerVector::Visitor& visitor) {
- LayerVector list = makeTraversalList(stateSet);
+ // See traverseInZOrder for documentation.
+ bool skipRelativeZUsers = false;
+ LayerVector list = makeTraversalList(stateSet, &skipRelativeZUsers);
int32_t i = 0;
for (i = int32_t(list.size()) - 1; i >= 0; i--) {
const auto& relative = list[i];
+
+ if (skipRelativeZUsers && relative->usingRelativeZ(stateSet)) {
+ continue;
+ }
+
if (relative->getZ() < 0) {
break;
}
@@ -1682,6 +1716,11 @@
visitor(this);
for (; i >= 0; i--) {
const auto& relative = list[i];
+
+ if (skipRelativeZUsers && relative->usingRelativeZ(stateSet)) {
+ continue;
+ }
+
relative->traverseInReverseZOrder(stateSet, visitor);
}
}
diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h
index 8ac5094..7c6bc59 100644
--- a/services/surfaceflinger/Layer.h
+++ b/services/surfaceflinger/Layer.h
@@ -571,7 +571,7 @@
void setParent(const sp<Layer>& layer);
- LayerVector makeTraversalList(LayerVector::StateSet stateSet);
+ LayerVector makeTraversalList(LayerVector::StateSet stateSet, bool* outSkipRelativeZUsers);
void addZOrderRelative(const wp<Layer>& relative);
void removeZOrderRelative(const wp<Layer>& relative);
@@ -645,6 +645,7 @@
protected:
// -----------------------------------------------------------------------
+ bool usingRelativeZ(LayerVector::StateSet stateSet);
bool mPremultipliedAlpha;
String8 mName;