Merge "Move node_modules install to install-build-deps"
diff --git a/BUILD.gn b/BUILD.gn
index 22adbc5..7f22d1f 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -217,6 +217,14 @@
         "protos/perfetto/trace:lite",
       ]
     }
+  } else {
+    # The library which eases processing of Perfetto traces by exposing reading
+    # friendly APIs.
+    static_library("trace_processor") {
+      deps = [
+        "src/trace_processor:lib",
+      ]
+    }
   }
 }
 
diff --git a/include/perfetto/base/BUILD.gn b/include/perfetto/base/BUILD.gn
index 908baf4..ae08e9b 100644
--- a/include/perfetto/base/BUILD.gn
+++ b/include/perfetto/base/BUILD.gn
@@ -15,6 +15,7 @@
 source_set("base") {
   sources = [
     "build_config.h",
+    "export.h",
     "file_utils.h",
     "logging.h",
     "metatrace.h",
diff --git a/src/trace_processor/trace_storage.cc b/src/trace_processor/trace_storage.cc
index b58628c..1e6bcac 100644
--- a/src/trace_processor/trace_storage.cc
+++ b/src/trace_processor/trace_storage.cc
@@ -81,19 +81,20 @@
 void TraceStorage::MatchThreadToProcess(uint32_t tid, uint32_t tgid) {
   auto tids_pair = UtidsForTid(tid);
   // We only care about tids for which we have a matching utid.
-  PERFETTO_CHECK(std::distance(tids_pair.first, tids_pair.second) <= 1);
+  PERFETTO_DCHECK(std::distance(tids_pair.first, tids_pair.second) <= 1);
   if (tids_pair.first != tids_pair.second) {
+    PERFETTO_DCHECK(tids_pair.first->second < unique_threads_.size());
     Thread* thread = &unique_threads_[tids_pair.first->second];
     // If no upid is set - look it up.
     if (thread->upid == 0) {
       auto pids_pair = UpidsForPid(tgid);
-      PERFETTO_CHECK(std::distance(pids_pair.first, pids_pair.second) <= 1);
+      PERFETTO_DCHECK(std::distance(pids_pair.first, pids_pair.second) <= 1);
       if (pids_pair.first != pids_pair.second) {
         thread->upid = pids_pair.first->second;
         // If this is the first time we've used this process, set start_ns.
-        Process process = unique_processes_[pids_pair.first->second];
-        if (process.start_ns == 0)
-          process.start_ns = thread->start_ns;
+        Process* process = &unique_processes_[pids_pair.first->second];
+        if (process->start_ns == 0)
+          process->start_ns = thread->start_ns;
       }
     }
   }
diff --git a/src/trace_processor/trace_storage_unittest.cc b/src/trace_processor/trace_storage_unittest.cc
index 4d4e796..b1696a7 100644
--- a/src/trace_processor/trace_storage_unittest.cc
+++ b/src/trace_processor/trace_storage_unittest.cc
@@ -134,8 +134,10 @@
   storage.MatchThreadToProcess(1, 2);
 
   TraceStorage::Thread thread = storage.GetThread(1);
+  TraceStorage::Process process = storage.GetProcess(1);
 
   ASSERT_EQ(thread.upid, 1);
+  ASSERT_EQ(process.start_ns, timestamp);
 }
 
 }  // namespace