summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYabin Cui <yabinc@google.com>2021-12-21 15:47:05 -0800
committerYabin Cui <yabinc@google.com>2021-12-21 15:47:05 -0800
commit2da26a0ae9098d056d1767691a09c4db220a73ed (patch)
treeadc0097b0b4525e39925a36d4235fbdb98119063
parent1b9df9c4a46341a1c5342fdcbc10acd8138ac5de (diff)
downloadextras-2da26a0ae9098d056d1767691a09c4db220a73ed.tar.gz
simpleperf: use std::function for display function.
So we can provide display functions that take some information. Bug: 211001574 Test: run simpleperf_unit_test Change-Id: I59dbf3c59e0e42633e1903ae5fca8d9a6e23b34c
-rw-r--r--simpleperf/SampleDisplayer.h11
-rw-r--r--simpleperf/cmd_kmem.cpp15
-rw-r--r--simpleperf/cmd_report.cpp40
3 files changed, 34 insertions, 32 deletions
diff --git a/simpleperf/SampleDisplayer.h b/simpleperf/SampleDisplayer.h
index a6aceefb..d8390ef8 100644
--- a/simpleperf/SampleDisplayer.h
+++ b/simpleperf/SampleDisplayer.h
@@ -185,8 +185,8 @@ class CallgraphDisplayer {
template <typename EntryT, typename InfoT>
class SampleDisplayer {
public:
- typedef std::string (*display_sample_func_t)(const EntryT*);
- typedef std::string (*display_sample_with_info_func_t)(const EntryT*, const InfoT*);
+ using display_sample_func_t = std::function<std::string(const EntryT*)>;
+ using display_sample_with_info_func_t = std::function<std::string(const EntryT*, const InfoT*)>;
using exclusive_display_sample_func_t = std::function<void(FILE*, const EntryT*)>;
private:
@@ -207,7 +207,7 @@ class SampleDisplayer {
filter_func_ = filter;
}
- void AddDisplayFunction(const std::string& name, display_sample_func_t func) {
+ void AddDisplayFunction(const std::string& name, const display_sample_func_t& func) {
Item item;
item.name = name;
item.width = name.size();
@@ -216,7 +216,8 @@ class SampleDisplayer {
display_v_.push_back(item);
}
- void AddDisplayFunction(const std::string& name, display_sample_with_info_func_t func_with_info) {
+ void AddDisplayFunction(const std::string& name,
+ const display_sample_with_info_func_t& func_with_info) {
Item item;
item.name = name;
item.width = name.size();
@@ -225,7 +226,7 @@ class SampleDisplayer {
display_v_.push_back(item);
}
- void AddExclusiveDisplayFunction(exclusive_display_sample_func_t func) {
+ void AddExclusiveDisplayFunction(const exclusive_display_sample_func_t& func) {
exclusive_display_v_.push_back(func);
}
diff --git a/simpleperf/cmd_kmem.cpp b/simpleperf/cmd_kmem.cpp
index 10eb5c9e..c756eb3a 100644
--- a/simpleperf/cmd_kmem.cpp
+++ b/simpleperf/cmd_kmem.cpp
@@ -493,28 +493,29 @@ bool KmemCommand::PrepareToBuildSampleTree() {
for (const auto& key : slab_sort_keys_) {
if (key == "hit") {
sort_comparator.AddCompareFunction(CompareSampleCount);
- displayer.AddDisplayFunction(accumulated_name + "Hit", DisplaySampleCount);
+ displayer.AddDisplayFunction(accumulated_name + "Hit", DisplaySampleCount<SlabSample>);
} else if (key == "caller") {
comparator.AddCompareFunction(CompareSymbol);
- displayer.AddDisplayFunction("Caller", DisplaySymbol);
+ displayer.AddDisplayFunction("Caller", DisplaySymbol<SlabSample>);
} else if (key == "ptr") {
comparator.AddCompareFunction(ComparePtr);
- displayer.AddDisplayFunction("Ptr", DisplayPtr);
+ displayer.AddDisplayFunction("Ptr", DisplayPtr<SlabSample>);
} else if (key == "bytes_req") {
sort_comparator.AddCompareFunction(CompareBytesReq);
- displayer.AddDisplayFunction(accumulated_name + "BytesReq", DisplayBytesReq);
+ displayer.AddDisplayFunction(accumulated_name + "BytesReq", DisplayBytesReq<SlabSample>);
} else if (key == "bytes_alloc") {
sort_comparator.AddCompareFunction(CompareBytesAlloc);
- displayer.AddDisplayFunction(accumulated_name + "BytesAlloc", DisplayBytesAlloc);
+ displayer.AddDisplayFunction(accumulated_name + "BytesAlloc",
+ DisplayBytesAlloc<SlabSample>);
} else if (key == "fragment") {
sort_comparator.AddCompareFunction(CompareFragment);
displayer.AddDisplayFunction(accumulated_name + "Fragment", DisplayFragment);
} else if (key == "gfp_flags") {
comparator.AddCompareFunction(CompareGfpFlags);
- displayer.AddDisplayFunction("GfpFlags", DisplayGfpFlags);
+ displayer.AddDisplayFunction("GfpFlags", DisplayGfpFlags<SlabSample>);
} else if (key == "pingpong") {
sort_comparator.AddCompareFunction(CompareCrossCpuAllocations);
- displayer.AddDisplayFunction("Pingpong", DisplayCrossCpuAllocations);
+ displayer.AddDisplayFunction("Pingpong", DisplayCrossCpuAllocations<SlabSample>);
} else {
LOG(ERROR) << "Unknown sort key for slab allocation: " << key;
return false;
diff --git a/simpleperf/cmd_report.cpp b/simpleperf/cmd_report.cpp
index eddedbc2..55b543be 100644
--- a/simpleperf/cmd_report.cpp
+++ b/simpleperf/cmd_report.cpp
@@ -649,21 +649,21 @@ bool ReportCommand::BuildSampleComparatorAndDisplayer(bool print_sample_count,
if (accumulate_callchain_) {
if (raw_period_) {
- displayer.AddDisplayFunction("Children", DisplayAccumulatedPeriod);
- displayer.AddDisplayFunction("Self", DisplaySelfPeriod);
+ displayer.AddDisplayFunction("Children", DisplayAccumulatedPeriod<SampleEntry>);
+ displayer.AddDisplayFunction("Self", DisplaySelfPeriod<SampleEntry>);
} else {
- displayer.AddDisplayFunction("Children", DisplayAccumulatedOverhead);
- displayer.AddDisplayFunction("Self", DisplaySelfOverhead);
+ displayer.AddDisplayFunction("Children", DisplayAccumulatedOverhead<SampleEntry, SampleTree>);
+ displayer.AddDisplayFunction("Self", DisplaySelfOverhead<SampleEntry, SampleTree>);
}
} else {
if (raw_period_) {
- displayer.AddDisplayFunction("Overhead", DisplaySelfPeriod);
+ displayer.AddDisplayFunction("Overhead", DisplaySelfPeriod<SampleEntry>);
} else {
- displayer.AddDisplayFunction("Overhead", DisplaySelfOverhead);
+ displayer.AddDisplayFunction("Overhead", DisplaySelfOverhead<SampleEntry, SampleTree>);
}
}
if (print_sample_count) {
- displayer.AddDisplayFunction("Sample", DisplaySampleCount);
+ displayer.AddDisplayFunction("Sample", DisplaySampleCount<SampleEntry>);
}
for (auto& key : sort_keys) {
@@ -673,34 +673,34 @@ bool ReportCommand::BuildSampleComparatorAndDisplayer(bool print_sample_count,
}
if (key == "pid") {
comparator.AddCompareFunction(ComparePid);
- displayer.AddDisplayFunction("Pid", DisplayPid);
+ displayer.AddDisplayFunction("Pid", DisplayPid<SampleEntry>);
} else if (key == "tid") {
comparator.AddCompareFunction(CompareTid);
- displayer.AddDisplayFunction("Tid", DisplayTid);
+ displayer.AddDisplayFunction("Tid", DisplayTid<SampleEntry>);
} else if (key == "comm") {
comparator.AddCompareFunction(CompareComm);
- displayer.AddDisplayFunction("Command", DisplayComm);
+ displayer.AddDisplayFunction("Command", DisplayComm<SampleEntry>);
} else if (key == "dso") {
comparator.AddCompareFunction(CompareDso);
- displayer.AddDisplayFunction("Shared Object", DisplayDso);
+ displayer.AddDisplayFunction("Shared Object", DisplayDso<SampleEntry>);
} else if (key == "symbol") {
comparator.AddCompareFunction(CompareSymbol);
- displayer.AddDisplayFunction("Symbol", DisplaySymbol);
+ displayer.AddDisplayFunction("Symbol", DisplaySymbol<SampleEntry>);
} else if (key == "vaddr_in_file") {
comparator.AddCompareFunction(CompareVaddrInFile);
- displayer.AddDisplayFunction("VaddrInFile", DisplayVaddrInFile);
+ displayer.AddDisplayFunction("VaddrInFile", DisplayVaddrInFile<SampleEntry>);
} else if (key == "dso_from") {
comparator.AddCompareFunction(CompareDsoFrom);
- displayer.AddDisplayFunction("Source Shared Object", DisplayDsoFrom);
+ displayer.AddDisplayFunction("Source Shared Object", DisplayDsoFrom<SampleEntry>);
} else if (key == "dso_to") {
comparator.AddCompareFunction(CompareDso);
- displayer.AddDisplayFunction("Target Shared Object", DisplayDso);
+ displayer.AddDisplayFunction("Target Shared Object", DisplayDso<SampleEntry>);
} else if (key == "symbol_from") {
comparator.AddCompareFunction(CompareSymbolFrom);
- displayer.AddDisplayFunction("Source Symbol", DisplaySymbolFrom);
+ displayer.AddDisplayFunction("Source Symbol", DisplaySymbolFrom<SampleEntry>);
} else if (key == "symbol_to") {
comparator.AddCompareFunction(CompareSymbol);
- displayer.AddDisplayFunction("Target Symbol", DisplaySymbol);
+ displayer.AddDisplayFunction("Target Symbol", DisplaySymbol<SampleEntry>);
} else {
LOG(ERROR) << "Unknown sort key: " << key;
return false;
@@ -709,10 +709,10 @@ bool ReportCommand::BuildSampleComparatorAndDisplayer(bool print_sample_count,
if (report_csv_) {
if (accumulate_callchain_) {
- displayer.AddDisplayFunction("AccEventCount", DisplayAccumulatedPeriod);
- displayer.AddDisplayFunction("SelfEventCount", DisplaySelfPeriod);
+ displayer.AddDisplayFunction("AccEventCount", DisplayAccumulatedPeriod<SampleEntry>);
+ displayer.AddDisplayFunction("SelfEventCount", DisplaySelfPeriod<SampleEntry>);
} else {
- displayer.AddDisplayFunction("EventCount", DisplaySelfPeriod);
+ displayer.AddDisplayFunction("EventCount", DisplaySelfPeriod<SampleEntry>);
}
displayer.AddDisplayFunction("EventName", DisplayEventName);
}