Loading include/media/stagefright/foundation/ADebug.h +7 −3 Original line number Diff line number Diff line Loading @@ -117,7 +117,7 @@ struct ADebug { }; // parse the property or string to get the debug level for a component name // parse the property or string to get a long-type level for a component name // string format is: // <level>[:<glob>][,<level>[:<glob>]...] // - <level> is 0-5 corresponding to ADebug::Level Loading @@ -125,10 +125,14 @@ struct ADebug { // matches all components // - string is read left-to-right, and the last matching level is returned, or // the def if no terms matched static long GetLevelFromSettingsString( const char *name, const char *value, long def); static long GetLevelFromProperty( const char *name, const char *value, long def); // same for ADebug::Level - performs clamping to valid debug ranges static Level GetDebugLevelFromProperty( const char *name, const char *propertyName, Level def = kDebugNone); static Level GetDebugLevelFromString( const char *name, const char *value, Level def = kDebugNone); // remove redundant segments of a codec name, and return a newly allocated // string suitable for debugging Loading media/libstagefright/foundation/ADebug.cpp +26 −12 Original line number Diff line number Diff line Loading @@ -32,11 +32,10 @@ namespace android { //static ADebug::Level ADebug::GetDebugLevelFromString( const char *name, const char *value, ADebug::Level def) { long ADebug::GetLevelFromSettingsString( const char *name, const char *value, long def) { // split on , const char *next = value, *current; const unsigned long maxLevel = (unsigned long)kDebugMax; while (next != NULL) { current = next; next = strchr(current, ','); Loading @@ -52,8 +51,8 @@ ADebug::Level ADebug::GetDebugLevelFromString( // get level char *end; errno = 0; // strtoul does not clear errno, but it can be set for any return value unsigned long level = strtoul(current, &end, 10); errno = 0; // strtol does not clear errno, but it can be set for any return value long level = strtol(current, &end, 10); while (isspace(*end)) { ++end; } Loading @@ -77,22 +76,29 @@ ADebug::Level ADebug::GetDebugLevelFromString( } } // update debug level def = (Level)min(level, maxLevel); // update value def = level; } return def; } //static ADebug::Level ADebug::GetDebugLevelFromProperty( const char *name, const char *propertyName, ADebug::Level def) { long ADebug::GetLevelFromProperty( const char *name, const char *propertyName, long def) { char value[PROPERTY_VALUE_MAX]; if (property_get(propertyName, value, NULL)) { return GetDebugLevelFromString(name, value, def); def = GetLevelFromSettingsString(name, value, def); } return def; } //static ADebug::Level ADebug::GetDebugLevelFromProperty( const char *name, const char *propertyName, ADebug::Level def) { long level = GetLevelFromProperty(name, propertyName, (long)def); return (Level)min(max(level, (long)kDebugNone), (long)kDebugMax); } //static char *ADebug::GetDebugName(const char *name) { char *debugName = strdup(name); Loading @@ -118,6 +124,15 @@ char *ADebug::GetDebugName(const char *name) { bool ADebug::getExperimentFlag( bool allow, const char *name, uint64_t modulo, uint64_t limit, uint64_t plus, uint64_t timeDivisor) { // see if this experiment should be disabled/enabled based on properties. // default to 2 to allow 0/1 specification const int undefined = 2; long level = GetLevelFromProperty(name, "debug.stagefright.experiments", undefined); if (level != undefined) { ALOGI("experiment '%s': %s from property", name, level ? "ENABLED" : "disabled"); return level != 0; } static volatile int32_t haveSerial = 0; static uint64_t serialNum; if (!android_atomic_acquire_load(&haveSerial)) { Loading @@ -138,11 +153,10 @@ bool ADebug::getExperimentFlag( num = num * 256 + c; } } ALOGI("got serial"); serialNum = num; android_atomic_release_store(1, &haveSerial); } ALOGI("serial: %llu, time: %llu", (long long)serialNum, (long long)time(NULL)); ALOGD("serial: %llu, time: %lld", (long long unsigned)serialNum, (long long)time(NULL)); // MINOR: use modulo for counter and time, so that their sum does not // roll over, and mess up the correlation between related experiments. // e.g. keep (a mod 2N) = 0 impl (a mod N) = 0 Loading media/libstagefright/tests/Utils_test.cpp +11 −11 Original line number Diff line number Diff line Loading @@ -109,21 +109,21 @@ TEST_F(UtilsTest, TestStringUtils) { TEST_F(UtilsTest, TestDebug) { #define LVL(x) (ADebug::Level)(x) ASSERT_EQ(ADebug::GetDebugLevelFromString("video", "", LVL(5)), LVL(5)); ASSERT_EQ(ADebug::GetDebugLevelFromString("video", " \t \n ", LVL(2)), LVL(2)); ASSERT_EQ(ADebug::GetDebugLevelFromString("video", "3", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetDebugLevelFromString("video", "3:*deo", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetDebugLevelFromString( ASSERT_EQ(ADebug::GetLevelFromSettingsString("video", "", LVL(5)), LVL(5)); ASSERT_EQ(ADebug::GetLevelFromSettingsString("video", " \t \n ", LVL(2)), LVL(2)); ASSERT_EQ(ADebug::GetLevelFromSettingsString("video", "3", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetLevelFromSettingsString("video", "3:*deo", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetLevelFromSettingsString( "video", "\t\n 3 \t\n:\t\n video \t\n", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetDebugLevelFromString("video", "3:*deo,2:vid*", LVL(5)), LVL(2)); ASSERT_EQ(ADebug::GetDebugLevelFromString( ASSERT_EQ(ADebug::GetLevelFromSettingsString("video", "3:*deo,2:vid*", LVL(5)), LVL(2)); ASSERT_EQ(ADebug::GetLevelFromSettingsString( "avideo", "\t\n 3 \t\n:\t\n avideo \t\n,\t\n 2 \t\n:\t\n video \t\n", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetDebugLevelFromString( ASSERT_EQ(ADebug::GetLevelFromSettingsString( "audio.omx", "4:*omx,3:*d*o*,2:audio*", LVL(5)), LVL(2)); ASSERT_EQ(ADebug::GetDebugLevelFromString( ASSERT_EQ(ADebug::GetLevelFromSettingsString( "video.omx", "4:*omx,3:*d*o*,2:audio*", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetDebugLevelFromString("video", "4:*omx,3:*d*o*,2:audio*", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetDebugLevelFromString("omx", "4:*omx,3:*d*o*,2:audio*", LVL(5)), LVL(4)); ASSERT_EQ(ADebug::GetLevelFromSettingsString("video", "4:*omx,3:*d*o*,2:audio*", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetLevelFromSettingsString("omx", "4:*omx,3:*d*o*,2:audio*", LVL(5)), LVL(4)); #undef LVL } Loading Loading
include/media/stagefright/foundation/ADebug.h +7 −3 Original line number Diff line number Diff line Loading @@ -117,7 +117,7 @@ struct ADebug { }; // parse the property or string to get the debug level for a component name // parse the property or string to get a long-type level for a component name // string format is: // <level>[:<glob>][,<level>[:<glob>]...] // - <level> is 0-5 corresponding to ADebug::Level Loading @@ -125,10 +125,14 @@ struct ADebug { // matches all components // - string is read left-to-right, and the last matching level is returned, or // the def if no terms matched static long GetLevelFromSettingsString( const char *name, const char *value, long def); static long GetLevelFromProperty( const char *name, const char *value, long def); // same for ADebug::Level - performs clamping to valid debug ranges static Level GetDebugLevelFromProperty( const char *name, const char *propertyName, Level def = kDebugNone); static Level GetDebugLevelFromString( const char *name, const char *value, Level def = kDebugNone); // remove redundant segments of a codec name, and return a newly allocated // string suitable for debugging Loading
media/libstagefright/foundation/ADebug.cpp +26 −12 Original line number Diff line number Diff line Loading @@ -32,11 +32,10 @@ namespace android { //static ADebug::Level ADebug::GetDebugLevelFromString( const char *name, const char *value, ADebug::Level def) { long ADebug::GetLevelFromSettingsString( const char *name, const char *value, long def) { // split on , const char *next = value, *current; const unsigned long maxLevel = (unsigned long)kDebugMax; while (next != NULL) { current = next; next = strchr(current, ','); Loading @@ -52,8 +51,8 @@ ADebug::Level ADebug::GetDebugLevelFromString( // get level char *end; errno = 0; // strtoul does not clear errno, but it can be set for any return value unsigned long level = strtoul(current, &end, 10); errno = 0; // strtol does not clear errno, but it can be set for any return value long level = strtol(current, &end, 10); while (isspace(*end)) { ++end; } Loading @@ -77,22 +76,29 @@ ADebug::Level ADebug::GetDebugLevelFromString( } } // update debug level def = (Level)min(level, maxLevel); // update value def = level; } return def; } //static ADebug::Level ADebug::GetDebugLevelFromProperty( const char *name, const char *propertyName, ADebug::Level def) { long ADebug::GetLevelFromProperty( const char *name, const char *propertyName, long def) { char value[PROPERTY_VALUE_MAX]; if (property_get(propertyName, value, NULL)) { return GetDebugLevelFromString(name, value, def); def = GetLevelFromSettingsString(name, value, def); } return def; } //static ADebug::Level ADebug::GetDebugLevelFromProperty( const char *name, const char *propertyName, ADebug::Level def) { long level = GetLevelFromProperty(name, propertyName, (long)def); return (Level)min(max(level, (long)kDebugNone), (long)kDebugMax); } //static char *ADebug::GetDebugName(const char *name) { char *debugName = strdup(name); Loading @@ -118,6 +124,15 @@ char *ADebug::GetDebugName(const char *name) { bool ADebug::getExperimentFlag( bool allow, const char *name, uint64_t modulo, uint64_t limit, uint64_t plus, uint64_t timeDivisor) { // see if this experiment should be disabled/enabled based on properties. // default to 2 to allow 0/1 specification const int undefined = 2; long level = GetLevelFromProperty(name, "debug.stagefright.experiments", undefined); if (level != undefined) { ALOGI("experiment '%s': %s from property", name, level ? "ENABLED" : "disabled"); return level != 0; } static volatile int32_t haveSerial = 0; static uint64_t serialNum; if (!android_atomic_acquire_load(&haveSerial)) { Loading @@ -138,11 +153,10 @@ bool ADebug::getExperimentFlag( num = num * 256 + c; } } ALOGI("got serial"); serialNum = num; android_atomic_release_store(1, &haveSerial); } ALOGI("serial: %llu, time: %llu", (long long)serialNum, (long long)time(NULL)); ALOGD("serial: %llu, time: %lld", (long long unsigned)serialNum, (long long)time(NULL)); // MINOR: use modulo for counter and time, so that their sum does not // roll over, and mess up the correlation between related experiments. // e.g. keep (a mod 2N) = 0 impl (a mod N) = 0 Loading
media/libstagefright/tests/Utils_test.cpp +11 −11 Original line number Diff line number Diff line Loading @@ -109,21 +109,21 @@ TEST_F(UtilsTest, TestStringUtils) { TEST_F(UtilsTest, TestDebug) { #define LVL(x) (ADebug::Level)(x) ASSERT_EQ(ADebug::GetDebugLevelFromString("video", "", LVL(5)), LVL(5)); ASSERT_EQ(ADebug::GetDebugLevelFromString("video", " \t \n ", LVL(2)), LVL(2)); ASSERT_EQ(ADebug::GetDebugLevelFromString("video", "3", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetDebugLevelFromString("video", "3:*deo", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetDebugLevelFromString( ASSERT_EQ(ADebug::GetLevelFromSettingsString("video", "", LVL(5)), LVL(5)); ASSERT_EQ(ADebug::GetLevelFromSettingsString("video", " \t \n ", LVL(2)), LVL(2)); ASSERT_EQ(ADebug::GetLevelFromSettingsString("video", "3", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetLevelFromSettingsString("video", "3:*deo", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetLevelFromSettingsString( "video", "\t\n 3 \t\n:\t\n video \t\n", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetDebugLevelFromString("video", "3:*deo,2:vid*", LVL(5)), LVL(2)); ASSERT_EQ(ADebug::GetDebugLevelFromString( ASSERT_EQ(ADebug::GetLevelFromSettingsString("video", "3:*deo,2:vid*", LVL(5)), LVL(2)); ASSERT_EQ(ADebug::GetLevelFromSettingsString( "avideo", "\t\n 3 \t\n:\t\n avideo \t\n,\t\n 2 \t\n:\t\n video \t\n", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetDebugLevelFromString( ASSERT_EQ(ADebug::GetLevelFromSettingsString( "audio.omx", "4:*omx,3:*d*o*,2:audio*", LVL(5)), LVL(2)); ASSERT_EQ(ADebug::GetDebugLevelFromString( ASSERT_EQ(ADebug::GetLevelFromSettingsString( "video.omx", "4:*omx,3:*d*o*,2:audio*", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetDebugLevelFromString("video", "4:*omx,3:*d*o*,2:audio*", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetDebugLevelFromString("omx", "4:*omx,3:*d*o*,2:audio*", LVL(5)), LVL(4)); ASSERT_EQ(ADebug::GetLevelFromSettingsString("video", "4:*omx,3:*d*o*,2:audio*", LVL(5)), LVL(3)); ASSERT_EQ(ADebug::GetLevelFromSettingsString("omx", "4:*omx,3:*d*o*,2:audio*", LVL(5)), LVL(4)); #undef LVL } Loading