summaryrefslogtreecommitdiff
path: root/cmds/dumpstate/DumpPool.cpp
diff options
context:
space:
mode:
author Rhed Jao <rhedjao@google.com> 2020-07-16 17:37:39 +0800
committer Rhed Jao <rhedjao@google.com> 2020-10-19 04:08:01 +0000
commit1c855127ea2e2da223253b0dadcadde9a3ee94d0 (patch)
tree366b8fc392bb51b0929dd9709ba8b159a3437501 /cmds/dumpstate/DumpPool.cpp
parent27077b1393e20c0e90fb7beeea7e3bba6014638e (diff)
Faster bugreports (2/n)
- Having a system property to disable parallel run function. - Post 'DumpTraces' to the thread pool. 3% is improved compared with single thread run. Bug: 136262402 Test: atest dumpstate_test Test: atest dumpstate_smoke_test Test: Manual enable and disable parallel run Test: Manual trigger report using hardware key Test: Manual trigger using bugreport shortcut Change-Id: I2185cc3e2f429a150605d6268324c52d137db385 Merged-In: I2185cc3e2f429a150605d6268324c52d137db385 (cherry picked from commit 5377d797fff94e0e070fdbbadc89288d90cc5f2c)
Diffstat (limited to 'cmds/dumpstate/DumpPool.cpp')
-rw-r--r--cmds/dumpstate/DumpPool.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/cmds/dumpstate/DumpPool.cpp b/cmds/dumpstate/DumpPool.cpp
index 7324ead7c6..e174c8eff3 100644
--- a/cmds/dumpstate/DumpPool.cpp
+++ b/cmds/dumpstate/DumpPool.cpp
@@ -33,7 +33,8 @@ namespace dumpstate {
const std::string DumpPool::PREFIX_TMPFILE_NAME = "dump-tmp.";
-DumpPool::DumpPool(const std::string& tmp_root) : tmp_root_(tmp_root), shutdown_(false) {
+DumpPool::DumpPool(const std::string& tmp_root) : tmp_root_(tmp_root), shutdown_(false),
+ log_duration_(true) {
assert(!tmp_root.empty());
deleteTempFiles(tmp_root_);
}
@@ -99,6 +100,26 @@ void DumpPool::waitForTask(const std::string& task_name, const std::string& titl
}
}
+void DumpPool::setLogDuration(bool log_duration) {
+ log_duration_ = log_duration;
+}
+
+template <>
+void DumpPool::invokeTask<std::function<void()>>(std::function<void()> dump_func,
+ const std::string& duration_title, int out_fd) {
+ DurationReporter duration_reporter(duration_title, /*logcat_only =*/!log_duration_,
+ /*verbose =*/false, out_fd);
+ std::invoke(dump_func);
+}
+
+template <>
+void DumpPool::invokeTask<std::function<void(int)>>(std::function<void(int)> dump_func,
+ const std::string& duration_title, int out_fd) {
+ DurationReporter duration_reporter(duration_title, /*logcat_only =*/!log_duration_,
+ /*verbose =*/false, out_fd);
+ std::invoke(dump_func, out_fd);
+}
+
std::unique_ptr<DumpPool::TmpFile> DumpPool::createTempFile() {
auto tmp_file_ptr = std::make_unique<TmpFile>();
std::string file_name_format = "%s/" + PREFIX_TMPFILE_NAME + "XXXXXX";