Merge "Snap for 5934975 from 62f8e3510da3eb663810a30d64222d96cd5a2c23 to sdk-release" into sdk-release
diff --git a/cmds/dumpstate/dumpstate.cpp b/cmds/dumpstate/dumpstate.cpp
index 4674d2a..739f9ca 100644
--- a/cmds/dumpstate/dumpstate.cpp
+++ b/cmds/dumpstate/dumpstate.cpp
@@ -253,7 +253,7 @@
MYLOGE("Failed to retrieve module metadata package name: %s", status.toString8().c_str());
return 0L;
}
- MYLOGD("Module metadata package name: %s", package_name.c_str());
+ MYLOGD("Module metadata package name: %s\n", package_name.c_str());
int64_t version_code;
status = package_service->getVersionCodeForPackage(android::String16(package_name.c_str()),
&version_code);
@@ -876,6 +876,17 @@
CommandOptions::WithTimeoutInMs(timeout_ms).Build());
}
+static void DoSystemLogcat(time_t since) {
+ char since_str[80];
+ strftime(since_str, sizeof(since_str), "%Y-%m-%d %H:%M:%S.000", localtime(&since));
+
+ unsigned long timeout_ms = logcat_timeout({"main", "system", "crash"});
+ RunCommand("SYSTEM LOG",
+ {"logcat", "-v", "threadtime", "-v", "printable", "-v", "uid", "-d", "*:v", "-T",
+ since_str},
+ CommandOptions::WithTimeoutInMs(timeout_ms).Build());
+}
+
static void DoLogcat() {
unsigned long timeout_ms;
// DumpFile("EVENT LOG TAGS", "/etc/event-log-tags");
@@ -1365,8 +1376,6 @@
ds.TakeScreenshot();
}
- DoLogcat();
-
AddAnrTraceFiles();
// NOTE: tombstones are always added as separate entries in the zip archive
@@ -1523,6 +1532,12 @@
// keep the system stats as close to its initial state as possible.
RUN_SLOW_FUNCTION_WITH_CONSENT_CHECK(RunDumpsysCritical);
+ // Capture first logcat early on; useful to take a snapshot before dumpstate logs take over the
+ // buffer.
+ DoLogcat();
+ // Capture timestamp after first logcat to use in next logcat
+ time_t logcat_ts = time(nullptr);
+
/* collect stack traces from Dalvik and native processes (needs root) */
RUN_SLOW_FUNCTION_WITH_CONSENT_CHECK(ds.DumpTraces, &dump_traces_path);
@@ -1560,12 +1575,19 @@
RunCommand("Dmabuf dump", {"/product/bin/dmabuf_dump"});
}
+ DumpFile("PSI cpu", "/proc/pressure/cpu");
+ DumpFile("PSI memory", "/proc/pressure/memory");
+ DumpFile("PSI io", "/proc/pressure/io");
+
if (!DropRootUser()) {
return Dumpstate::RunStatus::ERROR;
}
RETURN_IF_USER_DENIED_CONSENT();
- return dumpstate();
+ Dumpstate::RunStatus status = dumpstate();
+ // Capture logcat since the last time we did it.
+ DoSystemLogcat(logcat_ts);
+ return status;
}
// This method collects common dumpsys for telephony and wifi
diff --git a/cmds/dumpstate/tests/dumpstate_smoke_test.cpp b/cmds/dumpstate/tests/dumpstate_smoke_test.cpp
index 181046a..7e6f6f5 100644
--- a/cmds/dumpstate/tests/dumpstate_smoke_test.cpp
+++ b/cmds/dumpstate/tests/dumpstate_smoke_test.cpp
@@ -216,8 +216,8 @@
duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
}
- static const char* getZipFilePath() {
- return ds.GetPath(".zip").c_str();
+ static const std::string getZipFilePath() {
+ return ds.GetPath(".zip");
}
};
std::shared_ptr<std::vector<SectionInfo>> ZippedBugreportGenerationTest::sections =
@@ -226,12 +226,12 @@
std::chrono::milliseconds ZippedBugreportGenerationTest::duration = 0s;
TEST_F(ZippedBugreportGenerationTest, IsGeneratedWithoutErrors) {
- EXPECT_EQ(access(getZipFilePath(), F_OK), 0);
+ EXPECT_EQ(access(getZipFilePath().c_str(), F_OK), 0);
}
TEST_F(ZippedBugreportGenerationTest, Is3MBto30MBinSize) {
struct stat st;
- EXPECT_EQ(stat(getZipFilePath(), &st), 0);
+ EXPECT_EQ(stat(getZipFilePath().c_str(), &st), 0);
EXPECT_GE(st.st_size, 3000000 /* 3MB */);
EXPECT_LE(st.st_size, 30000000 /* 30MB */);
}
@@ -250,7 +250,7 @@
public:
ZipArchiveHandle handle;
void SetUp() {
- ASSERT_EQ(OpenArchive(ZippedBugreportGenerationTest::getZipFilePath(), &handle), 0);
+ ASSERT_EQ(OpenArchive(ZippedBugreportGenerationTest::getZipFilePath().c_str(), &handle), 0);
}
void TearDown() {
CloseArchive(handle);
@@ -314,7 +314,7 @@
class BugreportSectionTest : public Test {
public:
static void SetUpTestCase() {
- ParseSections(ZippedBugreportGenerationTest::getZipFilePath(),
+ ParseSections(ZippedBugreportGenerationTest::getZipFilePath().c_str(),
ZippedBugreportGenerationTest::sections.get());
}
diff --git a/cmds/installd/tests/installd_cache_test.cpp b/cmds/installd/tests/installd_cache_test.cpp
index db09070..5a5cb53 100644
--- a/cmds/installd/tests/installd_cache_test.cpp
+++ b/cmds/installd/tests/installd_cache_test.cpp
@@ -67,29 +67,29 @@
}
static void mkdir(const char* path) {
- const char* fullPath = StringPrintf("/data/local/tmp/user/0/%s", path).c_str();
- ::mkdir(fullPath, 0755);
+ const std::string fullPath = StringPrintf("/data/local/tmp/user/0/%s", path);
+ ::mkdir(fullPath.c_str(), 0755);
}
static void touch(const char* path, int len, int time) {
- const char* fullPath = StringPrintf("/data/local/tmp/user/0/%s", path).c_str();
- int fd = ::open(fullPath, O_RDWR | O_CREAT, 0644);
+ const std::string fullPath = StringPrintf("/data/local/tmp/user/0/%s", path);
+ int fd = ::open(fullPath.c_str(), O_RDWR | O_CREAT, 0644);
::fallocate(fd, 0, 0, len);
::close(fd);
struct utimbuf times;
times.actime = times.modtime = std::time(0) + time;
- ::utime(fullPath, ×);
+ ::utime(fullPath.c_str(), ×);
}
static int exists(const char* path) {
- const char* fullPath = StringPrintf("/data/local/tmp/user/0/%s", path).c_str();
- return ::access(fullPath, F_OK);
+ const std::string fullPath = StringPrintf("/data/local/tmp/user/0/%s", path);
+ return ::access(fullPath.c_str(), F_OK);
}
static int64_t size(const char* path) {
- const char* fullPath = StringPrintf("/data/local/tmp/user/0/%s", path).c_str();
+ const std::string fullPath = StringPrintf("/data/local/tmp/user/0/%s", path);
struct stat buf;
- if (!stat(fullPath, &buf)) {
+ if (!stat(fullPath.c_str(), &buf)) {
return buf.st_size;
} else {
return -1;
@@ -107,8 +107,8 @@
}
static void setxattr(const char* path, const char* key) {
- const char* fullPath = StringPrintf("/data/local/tmp/user/0/%s", path).c_str();
- ::setxattr(fullPath, key, "", 0, 0);
+ const std::string fullPath = StringPrintf("/data/local/tmp/user/0/%s", path);
+ ::setxattr(fullPath.c_str(), key, "", 0, 0);
}
class CacheTest : public testing::Test {
diff --git a/libs/binder/Android.bp b/libs/binder/Android.bp
index 296e3f6..643a956 100644
--- a/libs/binder/Android.bp
+++ b/libs/binder/Android.bp
@@ -71,7 +71,12 @@
// libbinder does not offer a stable wire protocol.
// if a second copy of it is installed, then it may break after security
// or dessert updates. Instead, apex users should use libbinder_ndk.
- no_apex: true,
+ apex_available: [
+ "//apex_available:platform",
+ // TODO(b/139016109) remove these three
+ "com.android.media.swcodec",
+ "test_com.android.media.swcodec",
+ ],
srcs: [
"Binder.cpp",
diff --git a/libs/binder/IMemory.cpp b/libs/binder/IMemory.cpp
index 094f89f..222b32c 100644
--- a/libs/binder/IMemory.cpp
+++ b/libs/binder/IMemory.cpp
@@ -149,6 +149,10 @@
return static_cast<char*>(base) + offset;
}
+void* IMemory::unsecurePointer() const {
+ return pointer();
+}
+
void* IMemory::pointer() const {
ssize_t offset;
sp<IMemoryHeap> heap = getMemory(&offset);
diff --git a/libs/binder/include/binder/IMemory.h b/libs/binder/include/binder/IMemory.h
index 3728029..98e92c4 100644
--- a/libs/binder/include/binder/IMemory.h
+++ b/libs/binder/include/binder/IMemory.h
@@ -76,6 +76,8 @@
// NOLINTNEXTLINE(google-default-arguments)
virtual sp<IMemoryHeap> getMemory(ssize_t* offset=nullptr, size_t* size=nullptr) const = 0;
+ void* unsecurePointer() const;
+
// helpers
void* fastPointer(const sp<IBinder>& heap, ssize_t offset) const;
void* pointer() const;
diff --git a/opengl/tests/gl_perf/fill_common.cpp b/opengl/tests/gl_perf/fill_common.cpp
index fefedc0..613f1c6 100644
--- a/opengl/tests/gl_perf/fill_common.cpp
+++ b/opengl/tests/gl_perf/fill_common.cpp
@@ -191,10 +191,10 @@
static void randUniform(int pgm, const char *var) {
GLint loc = glGetUniformLocation(pgm, var);
if (loc >= 0) {
- float x = ((float)rand()) / RAND_MAX;
- float y = ((float)rand()) / RAND_MAX;
- float z = ((float)rand()) / RAND_MAX;
- float w = ((float)rand()) / RAND_MAX;
+ float x = ((float)rand()) / (float)RAND_MAX;
+ float y = ((float)rand()) / (float)RAND_MAX;
+ float z = ((float)rand()) / (float)RAND_MAX;
+ float w = ((float)rand()) / (float)RAND_MAX;
glUniform4f(loc, x, y, z, w);
}
}