Upload all values instead of only mean and err into histograms

Bug: None
Change-Id: I3c4778bcc8170f5de11b61173dfebbdb5fd9b462
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/208287
Reviewed-by: Andrey Logvin <landrey@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33311}
diff --git a/test/testsupport/perf_test.cc b/test/testsupport/perf_test.cc
index c3800b9..d2ac620 100644
--- a/test/testsupport/perf_test.cc
+++ b/test/testsupport/perf_test.cc
@@ -42,6 +42,19 @@
   }
 }
 
+std::vector<SamplesStatsCounter::StatsSample> GetSortedSamples(
+    const SamplesStatsCounter& counter) {
+  rtc::ArrayView<const SamplesStatsCounter::StatsSample> view =
+      counter.GetTimedSamples();
+  std::vector<SamplesStatsCounter::StatsSample> out(view.begin(), view.end());
+  std::sort(out.begin(), out.end(),
+            [](const SamplesStatsCounter::StatsSample& a,
+               const SamplesStatsCounter::StatsSample& b) {
+              return a.time < b.time;
+            });
+  return out;
+}
+
 template <typename Container>
 void OutputListToStream(std::ostream* ostream, const Container& values) {
   const char* sep = "";
@@ -278,8 +291,19 @@
 
   double mean = counter.IsEmpty() ? 0 : counter.GetAverage();
   double error = counter.IsEmpty() ? 0 : counter.GetStandardDeviation();
-  PrintResultMeanAndError(measurement, modifier, trace, mean, error, units,
-                          important, improve_direction);
+
+  std::vector<SamplesStatsCounter::StatsSample> timed_samples =
+      GetSortedSamples(counter);
+  std::vector<double> samples(timed_samples.size());
+  for (size_t i = 0; i < timed_samples.size(); ++i) {
+    samples[i] = timed_samples[i].value;
+  }
+
+  GetPerfWriter().LogResultList(graph_name.str(), trace, samples, units,
+                                important, improve_direction);
+  GetResultsLinePrinter().PrintResultMeanAndError(graph_name.str(), trace, mean,
+                                                  error, units, important,
+                                                  improve_direction);
 }
 
 void PrintResultMeanAndError(absl::string_view measurement,
diff --git a/test/testsupport/perf_test_histogram_writer_unittest.cc b/test/testsupport/perf_test_histogram_writer_unittest.cc
index 6b083d6..83025a7 100644
--- a/test/testsupport/perf_test_histogram_writer_unittest.cc
+++ b/test/testsupport/perf_test_histogram_writer_unittest.cc
@@ -34,6 +34,25 @@
   ASSERT_EQ(histogram_set.histograms_size(), 1);
 }
 
+TEST(PerfHistogramWriterUnittest, TestListOfValuesHistogram) {
+  std::unique_ptr<PerfTestResultWriter> writer =
+      std::unique_ptr<PerfTestResultWriter>(CreateHistogramWriter());
+
+  std::vector<double> samples{0, 1, 2};
+  writer->LogResultList("-", "-", samples, "ms", false,
+                        ImproveDirection::kNone);
+
+  proto::HistogramSet histogram_set;
+  EXPECT_TRUE(histogram_set.ParseFromString(writer->Serialize()))
+      << "Expected valid histogram set";
+
+  ASSERT_EQ(histogram_set.histograms_size(), 1);
+  ASSERT_EQ(histogram_set.histograms(0).sample_values_size(), 3);
+  EXPECT_EQ(histogram_set.histograms(0).sample_values(0), 0);
+  EXPECT_EQ(histogram_set.histograms(0).sample_values(1), 1);
+  EXPECT_EQ(histogram_set.histograms(0).sample_values(2), 2);
+}
+
 TEST(PerfHistogramWriterUnittest, WritesSamplesAndUserStory) {
   std::unique_ptr<PerfTestResultWriter> writer =
       std::unique_ptr<PerfTestResultWriter>(CreateHistogramWriter());