transcoding: add thermal status listener
Register thermal status listener with thermal manager, and
pause/resume transcoding activity when thermal status goes
above certain threshold (currently set at CRITICAL).
Add unit tests with mock thermal policy. Also add unit test
that exercise the actual transcoding service, but use adb
shell cmd to fake thermal status change.
bug: 169452730
test: unit testing added in the CL; manual testing using
"adb shell cmd thermalservice override-status #" and observe
thermal throttling logs from transcoding service.
Change-Id: I7d28ed3069bdd73e8984ad138e2edba9c9a2360a
diff --git a/services/mediatranscoding/tests/Android.bp b/services/mediatranscoding/tests/Android.bp
index 5a7c4cc..9d3e56c 100644
--- a/services/mediatranscoding/tests/Android.bp
+++ b/services/mediatranscoding/tests/Android.bp
@@ -18,13 +18,13 @@
"libbinder_ndk",
"liblog",
"libutils",
- "libmediatranscodingservice",
"libcutils",
],
static_libs: [
"mediatranscoding_aidl_interface-ndk_platform",
"resourcemanager_aidl_interface-ndk_platform",
+ "libmediatranscodingservice",
],
required: [
diff --git a/services/mediatranscoding/tests/mediatranscodingservice_simulated_tests.cpp b/services/mediatranscoding/tests/mediatranscodingservice_simulated_tests.cpp
index 7dfda44..601bb1b 100644
--- a/services/mediatranscoding/tests/mediatranscodingservice_simulated_tests.cpp
+++ b/services/mediatranscoding/tests/mediatranscodingservice_simulated_tests.cpp
@@ -354,5 +354,36 @@
ALOGD("TestTranscodingUidPolicy finished.");
}
+TEST_F(MediaTranscodingServiceSimulatedTest, TestTranscodingThermalPolicy) {
+ ALOGD("TestTranscodingThermalPolicy starting...");
+
+ registerMultipleClients();
+
+ // Submit request, should start immediately.
+ EXPECT_TRUE(mClient1->submit(0, "test_source_file_0", "test_destination_file_0"));
+ EXPECT_EQ(mClient1->pop(kPaddingUs), EventTracker::Start(CLIENT(1), 0));
+
+ // Now, simulate thermal status change by adb cmd. The status code is as defined in
+ // frameworks/native/include/android/thermal.h.
+ // ATHERMAL_STATUS_SEVERE(3): should start throttling.
+ EXPECT_TRUE(ShellHelper::RunCmd("cmd thermalservice override-status 3"));
+ EXPECT_EQ(mClient1->pop(kPaddingUs), EventTracker::Pause(CLIENT(1), 0));
+
+ // ATHERMAL_STATUS_CRITICAL(4): shouldn't start throttling again (already started).
+ EXPECT_TRUE(ShellHelper::RunCmd("cmd thermalservice override-status 4"));
+ EXPECT_EQ(mClient1->pop(kPaddingUs), EventTracker::NoEvent);
+
+ // ATHERMAL_STATUS_MODERATE(2): should stop throttling.
+ EXPECT_TRUE(ShellHelper::RunCmd("cmd thermalservice override-status 2"));
+ EXPECT_EQ(mClient1->pop(kPaddingUs), EventTracker::Resume(CLIENT(1), 0));
+
+ // ATHERMAL_STATUS_LIGHT(1): shouldn't stop throttling again (already stopped).
+ EXPECT_TRUE(ShellHelper::RunCmd("cmd thermalservice override-status 1"));
+ EXPECT_EQ(mClient1->pop(kSessionWithPaddingUs), EventTracker::Finished(CLIENT(1), 0));
+
+ unregisterMultipleClients();
+
+ ALOGD("TestTranscodingThermalPolicy finished.");
+}
} // namespace media
} // namespace android