Loading cmds/incidentd/src/Section.cpp +6 −4 Original line number Diff line number Diff line Loading @@ -151,7 +151,8 @@ DONE: } // ================================================================================ Section::Section(int i, const int64_t timeoutMs) : id(i), timeoutMs(timeoutMs) {} Section::Section(int i, int64_t timeoutMs, bool deviceSpecific) : id(i), timeoutMs(timeoutMs), deviceSpecific(deviceSpecific) {} Section::~Section() {} Loading Loading @@ -236,8 +237,9 @@ status_t MetadataSection::Execute(ReportRequestSet* requests) const { // ================================================================================ static inline bool isSysfs(const char* filename) { return strncmp(filename, "/sys/", 5) == 0; } FileSection::FileSection(int id, const char* filename, const int64_t timeoutMs) : Section(id, timeoutMs), mFilename(filename) { FileSection::FileSection(int id, const char* filename, const bool deviceSpecific, const int64_t timeoutMs) : Section(id, timeoutMs, deviceSpecific), mFilename(filename) { name = filename; mIsSysfs = isSysfs(filename); } Loading @@ -250,7 +252,7 @@ status_t FileSection::Execute(ReportRequestSet* requests) const { unique_fd fd(open(mFilename, O_RDONLY | O_CLOEXEC)); if (fd.get() == -1) { ALOGW("FileSection '%s' failed to open file", this->name.string()); return -errno; return this->deviceSpecific ? NO_ERROR : -errno; } FdBuffer buffer; Loading cmds/incidentd/src/Section.h +7 −5 Original line number Diff line number Diff line Loading @@ -40,9 +40,10 @@ class Section { public: const int id; const int64_t timeoutMs; // each section must have a timeout const bool deviceSpecific; String8 name; Section(int id, const int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS); Section(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS, bool deviceSpecific = false); virtual ~Section(); virtual status_t Execute(ReportRequestSet* requests) const = 0; Loading Loading @@ -75,7 +76,8 @@ public: */ class FileSection : public Section { public: FileSection(int id, const char* filename, const int64_t timeoutMs = 5000 /* 5 seconds */); FileSection(int id, const char* filename, bool deviceSpecific = false, int64_t timeoutMs = 5000 /* 5 seconds */); virtual ~FileSection(); virtual status_t Execute(ReportRequestSet* requests) const; Loading Loading @@ -105,7 +107,7 @@ private: */ class WorkerThreadSection : public Section { public: WorkerThreadSection(int id, const int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS); WorkerThreadSection(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS); virtual ~WorkerThreadSection(); virtual status_t Execute(ReportRequestSet* requests) const; Loading @@ -118,7 +120,7 @@ public: */ class CommandSection : public Section { public: CommandSection(int id, const int64_t timeoutMs, const char* command, ...); CommandSection(int id, int64_t timeoutMs, const char* command, ...); CommandSection(int id, const char* command, ...); Loading Loading @@ -168,7 +170,7 @@ private: */ class TombstoneSection : public WorkerThreadSection { public: TombstoneSection(int id, const char* type, const int64_t timeoutMs = 30000 /* 30 seconds */); TombstoneSection(int id, const char* type, int64_t timeoutMs = 30000 /* 30 seconds */); virtual ~TombstoneSection(); virtual status_t BlockingCall(int pipeWriteFd) const; Loading cmds/incidentd/tests/Section_test.cpp +9 −1 Original line number Diff line number Diff line Loading @@ -143,8 +143,16 @@ TEST_F(SectionTest, FileSection) { EXPECT_THAT(GetCapturedStdout(), StrEq("\xa\vatadtsetmai")); } TEST_F(SectionTest, FileSectionNotExist) { FileSection fs1(NOOP_PARSER, "notexist", false, QUICK_TIMEOUT_MS); ASSERT_EQ(NAME_NOT_FOUND, fs1.Execute(&requests)); FileSection fs2(NOOP_PARSER, "notexist", true, QUICK_TIMEOUT_MS); ASSERT_EQ(NO_ERROR, fs2.Execute(&requests)); } TEST_F(SectionTest, FileSectionTimeout) { FileSection fs(TIMEOUT_PARSER, tf.path, QUICK_TIMEOUT_MS); FileSection fs(TIMEOUT_PARSER, tf.path, false, QUICK_TIMEOUT_MS); ASSERT_EQ(NO_ERROR, fs.Execute(&requests)); ASSERT_TRUE(requests.sectionStats(TIMEOUT_PARSER)->timed_out()); } Loading core/proto/android/os/incident.proto +3 −1 Original line number Diff line number Diff line Loading @@ -161,6 +161,7 @@ message IncidentProto { optional CpuFreqProto cpu_freq = 2004 [ (section).type = SECTION_FILE, (section).device_specific = true, (section).args = "/sys/devices/system/cpu/cpufreq/all_time_in_state" ]; Loading @@ -170,7 +171,8 @@ message IncidentProto { ]; optional BatteryTypeProto battery_type = 2006 [ (section).type = SECTION_NONE, // disabled since the path is device specific! (section).type = SECTION_FILE, (section).device_specific = true, (section).args = "/sys/class/power_supply/bms/battery_type" ]; Loading libs/incident/proto/android/section.proto +1 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ enum SectionType { message SectionFlags { optional SectionType type = 1 [default = SECTION_NONE]; optional string args = 2; optional bool device_specific = 3 [default = false]; } extend google.protobuf.FieldOptions { Loading Loading
cmds/incidentd/src/Section.cpp +6 −4 Original line number Diff line number Diff line Loading @@ -151,7 +151,8 @@ DONE: } // ================================================================================ Section::Section(int i, const int64_t timeoutMs) : id(i), timeoutMs(timeoutMs) {} Section::Section(int i, int64_t timeoutMs, bool deviceSpecific) : id(i), timeoutMs(timeoutMs), deviceSpecific(deviceSpecific) {} Section::~Section() {} Loading Loading @@ -236,8 +237,9 @@ status_t MetadataSection::Execute(ReportRequestSet* requests) const { // ================================================================================ static inline bool isSysfs(const char* filename) { return strncmp(filename, "/sys/", 5) == 0; } FileSection::FileSection(int id, const char* filename, const int64_t timeoutMs) : Section(id, timeoutMs), mFilename(filename) { FileSection::FileSection(int id, const char* filename, const bool deviceSpecific, const int64_t timeoutMs) : Section(id, timeoutMs, deviceSpecific), mFilename(filename) { name = filename; mIsSysfs = isSysfs(filename); } Loading @@ -250,7 +252,7 @@ status_t FileSection::Execute(ReportRequestSet* requests) const { unique_fd fd(open(mFilename, O_RDONLY | O_CLOEXEC)); if (fd.get() == -1) { ALOGW("FileSection '%s' failed to open file", this->name.string()); return -errno; return this->deviceSpecific ? NO_ERROR : -errno; } FdBuffer buffer; Loading
cmds/incidentd/src/Section.h +7 −5 Original line number Diff line number Diff line Loading @@ -40,9 +40,10 @@ class Section { public: const int id; const int64_t timeoutMs; // each section must have a timeout const bool deviceSpecific; String8 name; Section(int id, const int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS); Section(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS, bool deviceSpecific = false); virtual ~Section(); virtual status_t Execute(ReportRequestSet* requests) const = 0; Loading Loading @@ -75,7 +76,8 @@ public: */ class FileSection : public Section { public: FileSection(int id, const char* filename, const int64_t timeoutMs = 5000 /* 5 seconds */); FileSection(int id, const char* filename, bool deviceSpecific = false, int64_t timeoutMs = 5000 /* 5 seconds */); virtual ~FileSection(); virtual status_t Execute(ReportRequestSet* requests) const; Loading Loading @@ -105,7 +107,7 @@ private: */ class WorkerThreadSection : public Section { public: WorkerThreadSection(int id, const int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS); WorkerThreadSection(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS); virtual ~WorkerThreadSection(); virtual status_t Execute(ReportRequestSet* requests) const; Loading @@ -118,7 +120,7 @@ public: */ class CommandSection : public Section { public: CommandSection(int id, const int64_t timeoutMs, const char* command, ...); CommandSection(int id, int64_t timeoutMs, const char* command, ...); CommandSection(int id, const char* command, ...); Loading Loading @@ -168,7 +170,7 @@ private: */ class TombstoneSection : public WorkerThreadSection { public: TombstoneSection(int id, const char* type, const int64_t timeoutMs = 30000 /* 30 seconds */); TombstoneSection(int id, const char* type, int64_t timeoutMs = 30000 /* 30 seconds */); virtual ~TombstoneSection(); virtual status_t BlockingCall(int pipeWriteFd) const; Loading
cmds/incidentd/tests/Section_test.cpp +9 −1 Original line number Diff line number Diff line Loading @@ -143,8 +143,16 @@ TEST_F(SectionTest, FileSection) { EXPECT_THAT(GetCapturedStdout(), StrEq("\xa\vatadtsetmai")); } TEST_F(SectionTest, FileSectionNotExist) { FileSection fs1(NOOP_PARSER, "notexist", false, QUICK_TIMEOUT_MS); ASSERT_EQ(NAME_NOT_FOUND, fs1.Execute(&requests)); FileSection fs2(NOOP_PARSER, "notexist", true, QUICK_TIMEOUT_MS); ASSERT_EQ(NO_ERROR, fs2.Execute(&requests)); } TEST_F(SectionTest, FileSectionTimeout) { FileSection fs(TIMEOUT_PARSER, tf.path, QUICK_TIMEOUT_MS); FileSection fs(TIMEOUT_PARSER, tf.path, false, QUICK_TIMEOUT_MS); ASSERT_EQ(NO_ERROR, fs.Execute(&requests)); ASSERT_TRUE(requests.sectionStats(TIMEOUT_PARSER)->timed_out()); } Loading
core/proto/android/os/incident.proto +3 −1 Original line number Diff line number Diff line Loading @@ -161,6 +161,7 @@ message IncidentProto { optional CpuFreqProto cpu_freq = 2004 [ (section).type = SECTION_FILE, (section).device_specific = true, (section).args = "/sys/devices/system/cpu/cpufreq/all_time_in_state" ]; Loading @@ -170,7 +171,8 @@ message IncidentProto { ]; optional BatteryTypeProto battery_type = 2006 [ (section).type = SECTION_NONE, // disabled since the path is device specific! (section).type = SECTION_FILE, (section).device_specific = true, (section).args = "/sys/class/power_supply/bms/battery_type" ]; Loading
libs/incident/proto/android/section.proto +1 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ enum SectionType { message SectionFlags { optional SectionType type = 1 [default = SECTION_NONE]; optional string args = 2; optional bool device_specific = 3 [default = false]; } extend google.protobuf.FieldOptions { Loading