Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e09cde0c authored by Yi Jin's avatar Yi Jin Committed by Android (Google) Code Review
Browse files

Merge "Add a section flag to bypass failure if a specific path can't be found." into pi-dev

parents 85c7a9a1 7fe3dee3
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -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() {}

@@ -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);
}
@@ -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;
+7 −5
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
@@ -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, ...);

@@ -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;
+9 −1
Original line number Diff line number Diff line
@@ -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());
}
+3 −1
Original line number Diff line number Diff line
@@ -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"
    ];

@@ -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"
    ];

+1 −0
Original line number Diff line number Diff line
@@ -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