RTCStatsCollector: timestamps updated.

Using a timestamp based on a timer that is monotonically increasing for
the cache, so that cache's freshness can be checked regardless of if
system clock is modified.

Using a system clock for the stats' timestamp, which needs to be
relative to UNIX epoch (Jan 1, 1970, UTC).

This CL removes the dependency on faketiming.h.

BUG=chromium:627816
NOTRY=True

Review-Url: https://codereview.webrtc.org/2299643002
Cr-Commit-Position: refs/heads/master@{#13997}
diff --git a/webrtc/stats/rtcstatsreport_unittest.cc b/webrtc/stats/rtcstatsreport_unittest.cc
index b4722ab..2dcb584 100644
--- a/webrtc/stats/rtcstatsreport_unittest.cc
+++ b/webrtc/stats/rtcstatsreport_unittest.cc
@@ -18,8 +18,8 @@
 
 class RTCTestStats1 : public RTCStats {
  public:
-  RTCTestStats1(const std::string& id, double timestamp)
-      : RTCStats(id, timestamp),
+  RTCTestStats1(const std::string& id, int64_t timestamp_us)
+      : RTCStats(id, timestamp_us),
         integer("integer") {}
 
   WEBRTC_RTCSTATS_IMPL(RTCStats, RTCTestStats1,
@@ -32,8 +32,8 @@
 
 class RTCTestStats2 : public RTCStats {
  public:
-  RTCTestStats2(const std::string& id, double timestamp)
-      : RTCStats(id, timestamp),
+  RTCTestStats2(const std::string& id, int64_t timestamp_us)
+      : RTCStats(id, timestamp_us),
         number("number") {}
 
   WEBRTC_RTCSTATS_IMPL(RTCStats, RTCTestStats2,
@@ -46,8 +46,8 @@
 
 class RTCTestStats3 : public RTCStats {
  public:
-  RTCTestStats3(const std::string& id, double timestamp)
-      : RTCStats(id, timestamp),
+  RTCTestStats3(const std::string& id, int64_t timestamp_us)
+      : RTCStats(id, timestamp_us),
         string("string") {}
 
   WEBRTC_RTCSTATS_IMPL(RTCStats, RTCTestStats3,
@@ -61,12 +61,12 @@
 TEST(RTCStatsReport, AddAndGetStats) {
   rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create();
   EXPECT_EQ(report->size(), static_cast<size_t>(0));
-  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("a0", 1.0)));
-  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("a1", 2.0)));
-  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("b0", 4.0)));
-  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("b1", 8.0)));
-  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("a2", 16.0)));
-  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("b2", 32.0)));
+  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("a0", 1)));
+  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("a1", 2)));
+  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("b0", 4)));
+  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("b1", 8)));
+  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("a2", 16)));
+  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("b2", 32)));
   EXPECT_EQ(report->size(), static_cast<size_t>(6));
 
   EXPECT_EQ(report->Get("missing"), nullptr);
@@ -75,17 +75,17 @@
 
   std::vector<const RTCTestStats1*> a = report->GetStatsOfType<RTCTestStats1>();
   EXPECT_EQ(a.size(), static_cast<size_t>(3));
-  uint32_t mask = 0;
+  int64_t mask = 0;
   for (const RTCTestStats1* stats : a)
-    mask |= static_cast<uint32_t>(stats->timestamp());
-  EXPECT_EQ(mask, static_cast<uint32_t>(1 | 2 | 16));
+    mask |= stats->timestamp_us();
+  EXPECT_EQ(mask, static_cast<int64_t>(1 | 2 | 16));
 
   std::vector<const RTCTestStats2*> b = report->GetStatsOfType<RTCTestStats2>();
   EXPECT_EQ(b.size(), static_cast<size_t>(3));
   mask = 0;
   for (const RTCTestStats2* stats : b)
-    mask |= static_cast<uint32_t>(stats->timestamp());
-  EXPECT_EQ(mask, static_cast<uint32_t>(4 | 8 | 32));
+    mask |= stats->timestamp_us();
+  EXPECT_EQ(mask, static_cast<int64_t>(4 | 8 | 32));
 
   EXPECT_EQ(report->GetStatsOfType<RTCTestStats3>().size(),
             static_cast<size_t>(0));
@@ -93,39 +93,39 @@
 
 TEST(RTCStatsReport, StatsOrder) {
   rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create();
-  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("C", 2.0)));
-  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("D", 3.0)));
-  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("B", 1.0)));
-  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("A", 0.0)));
-  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("E", 4.0)));
-  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("F", 5.0)));
-  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("G", 6.0)));
-  size_t i = 0;
+  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("C", 2)));
+  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("D", 3)));
+  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("B", 1)));
+  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("A", 0)));
+  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("E", 4)));
+  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("F", 5)));
+  report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("G", 6)));
+  int64_t i = 0;
   for (const RTCStats& stats : *report) {
-    EXPECT_EQ(static_cast<size_t>(stats.timestamp()), i);
+    EXPECT_EQ(stats.timestamp_us(), i);
     ++i;
   }
-  EXPECT_EQ(i, static_cast<size_t>(7));
+  EXPECT_EQ(i, static_cast<int64_t>(7));
 }
 
 TEST(RTCStatsReport, TakeMembersFrom) {
   rtc::scoped_refptr<RTCStatsReport> a = RTCStatsReport::Create();
-  a->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("B", 1.0)));
-  a->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("C", 2.0)));
-  a->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("E", 4.0)));
+  a->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("B", 1)));
+  a->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("C", 2)));
+  a->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("E", 4)));
   rtc::scoped_refptr<RTCStatsReport> b = RTCStatsReport::Create();
-  b->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("A", 0.0)));
-  b->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("D", 3.0)));
-  b->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("F", 5.0)));
+  b->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("A", 0)));
+  b->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("D", 3)));
+  b->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats1("F", 5)));
 
   a->TakeMembersFrom(b);
   EXPECT_EQ(b->size(), static_cast<size_t>(0));
-  size_t i = 0;
+  int64_t i = 0;
   for (const RTCStats& stats : *a) {
-    EXPECT_EQ(static_cast<size_t>(stats.timestamp()), i);
+    EXPECT_EQ(stats.timestamp_us(), i);
     ++i;
   }
-  EXPECT_EQ(i, static_cast<size_t>(6));
+  EXPECT_EQ(i, static_cast<int64_t>(6));
 }
 
 }  // namespace webrtc