diff --git a/test/testsupport/perf_test.cc b/test/testsupport/perf_test.cc
index d79b4ec..9a39b18 100644
--- a/test/testsupport/perf_test.cc
+++ b/test/testsupport/perf_test.cc
@@ -72,20 +72,6 @@
                    units, important);
 }
 
-void AppendResult(std::string& output,
-                  const std::string& measurement,
-                  const std::string& modifier,
-                  const std::string& trace,
-                  size_t value,
-                  const std::string& units,
-                  bool important) {
-  std::ostringstream value_stream;
-  value_stream << value;
-  output += ResultsToString(measurement, modifier, trace,
-                            value_stream.str(),
-                            "", "", units, important);
-}
-
 void PrintResult(const std::string& measurement,
                  const std::string& modifier,
                  const std::string& trace,
@@ -96,17 +82,6 @@
                    important);
 }
 
-void AppendResult(std::string& output,
-                  const std::string& measurement,
-                  const std::string& modifier,
-                  const std::string& trace,
-                  const std::string& value,
-                  const std::string& units,
-                  bool important) {
-  output += ResultsToString(measurement, modifier, trace, value, "", "", units,
-                            important);
-}
-
 void PrintResultMeanAndError(const std::string& measurement,
                              const std::string& modifier,
                              const std::string& trace,
@@ -117,17 +92,6 @@
                    "{", "}", units, important);
 }
 
-void AppendResultMeanAndError(std::string& output,
-                              const std::string& measurement,
-                              const std::string& modifier,
-                              const std::string& trace,
-                              const std::string& mean_and_error,
-                              const std::string& units,
-                              bool important) {
-  output += ResultsToString(measurement, modifier, trace, mean_and_error,
-                            "{", "}", units, important);
-}
-
 void PrintResultList(const std::string& measurement,
                      const std::string& modifier,
                      const std::string& trace,
@@ -138,40 +102,5 @@
                    "[", "]", units, important);
 }
 
-void AppendResultList(std::string& output,
-                      const std::string& measurement,
-                      const std::string& modifier,
-                      const std::string& trace,
-                      const std::string& values,
-                      const std::string& units,
-                      bool important) {
-  output += ResultsToString(measurement, modifier, trace, values,
-                            "[", "]", units, important);
-}
-
-void PrintSystemCommitCharge(const std::string& test_name,
-                             size_t charge,
-                             bool important) {
-  PrintSystemCommitCharge(stdout, test_name, charge, important);
-}
-
-void PrintSystemCommitCharge(FILE* target,
-                             const std::string& test_name,
-                             size_t charge,
-                             bool important) {
-  fprintf(target, "%s", SystemCommitChargeToString(test_name, charge,
-                                                   important).c_str());
-}
-
-std::string SystemCommitChargeToString(const std::string& test_name,
-                                       size_t charge,
-                                       bool important) {
-  std::string trace_name(test_name);
-  std::string output;
-  AppendResult(output, "commit_charge", "", "cc" + trace_name, charge, "kb",
-               important);
-  return output;
-}
-
 }  // namespace test
 }  // namespace webrtc
diff --git a/test/testsupport/perf_test.h b/test/testsupport/perf_test.h
index e94f891..e864bb8 100644
--- a/test/testsupport/perf_test.h
+++ b/test/testsupport/perf_test.h
@@ -41,14 +41,6 @@
                  const std::string& units,
                  bool important);
 
-void AppendResult(std::string& output,
-                  const std::string& measurement,
-                  const std::string& modifier,
-                  const std::string& trace,
-                  size_t value,
-                  const std::string& units,
-                  bool important);
-
 // Like the above version of PrintResult(), but takes a std::string value
 // instead of a size_t.
 void PrintResult(const std::string& measurement,
@@ -58,14 +50,6 @@
                  const std::string& units,
                  bool important);
 
-void AppendResult(std::string& output,
-                  const std::string& measurement,
-                  const std::string& modifier,
-                  const std::string& trace,
-                  const std::string& value,
-                  const std::string& units,
-                  bool important);
-
 // Like PrintResult(), but prints a (mean, standard deviation) result pair.
 // The |<values>| should be two comma-separated numbers, the mean and
 // standard deviation (or other error metric) of the measurement.
@@ -76,14 +60,6 @@
                              const std::string& units,
                              bool important);
 
-void AppendResultMeanAndError(std::string& output,
-                              const std::string& measurement,
-                              const std::string& modifier,
-                              const std::string& trace,
-                              const std::string& mean_and_error,
-                              const std::string& units,
-                              bool important);
-
 // Like PrintResult(), but prints an entire list of results. The |values|
 // will generally be a list of comma-separated numbers. A typical
 // post-processing step might produce plots of their mean and standard
@@ -95,28 +71,6 @@
                      const std::string& units,
                      bool important);
 
-void AppendResultList(std::string& output,
-                      const std::string& measurement,
-                      const std::string& modifier,
-                      const std::string& trace,
-                      const std::string& values,
-                      const std::string& units,
-                      bool important);
-
-// Prints memory commit charge stats for use by perf graphs.
-void PrintSystemCommitCharge(const std::string& test_name,
-                             size_t charge,
-                             bool important);
-
-void PrintSystemCommitCharge(FILE* target,
-                             const std::string& test_name,
-                             size_t charge,
-                             bool important);
-
-std::string SystemCommitChargeToString(const std::string& test_name,
-                                       size_t charge,
-                                       bool important);
-
 // Converts list of values into comma-separated string for PrintResultList.
 template <typename Container>
 std::string ValuesToString(const Container& container) {
diff --git a/test/testsupport/perf_test_unittest.cc b/test/testsupport/perf_test_unittest.cc
index 3ad4197..b88f7e1 100644
--- a/test/testsupport/perf_test_unittest.cc
+++ b/test/testsupport/perf_test_unittest.cc
@@ -18,16 +18,15 @@
 namespace test {
 
 TEST(PerfTest, AppendResult) {
+  testing::internal::CaptureStdout();
   std::string expected = "RESULT measurementmodifier: trace= 42 units\n";
-  std::string output;
-  AppendResult(output, "measurement", "modifier", "trace", 42, "units", false);
-  EXPECT_EQ(expected, output);
-  std::cout << output;
+  PrintResult("measurement", "modifier", "trace", 42, "units", false);
 
   expected += "*RESULT foobar: baz= 7 widgets\n";
-  AppendResult(output, "foo", "bar", "baz", 7, "widgets", true);
+  PrintResult( "foo", "bar", "baz", 7, "widgets", true);
+
+  std::string output = testing::internal::GetCapturedStdout();
   EXPECT_EQ(expected, output);
-  std::cout << output;
 }
 
 }  // namespace test
