Build trace processor lib on windows
Exposes trace_processor target for building from chrome checkout.
Also introduces several fixes to be able to build it on windows.
Bug: 133746356
Change-Id: Ic2e7cd20e2933393da3629986e6c80398a5395c0
diff --git a/BUILD.gn b/BUILD.gn
index 846d132..f42252e 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -47,6 +47,7 @@
deps = [
":perfetto_unittests",
"src/protozero/protoc_plugin($host_toolchain)",
+ "src/trace_processor:trace_processor",
]
if (perfetto_build_standalone || perfetto_build_with_android) {
deps += [
diff --git a/gn/BUILD.gn b/gn/BUILD.gn
index 7aa6d02..1fce079 100644
--- a/gn/BUILD.gn
+++ b/gn/BUILD.gn
@@ -88,6 +88,18 @@
}
}
+group("sqlite") {
+ if (perfetto_build_standalone || perfetto_build_with_android) {
+ public_deps = [
+ "//buildtools:sqlite",
+ ]
+ } else {
+ public_deps = [
+ "//third_party/sqlite:sqlite",
+ ]
+ }
+}
+
# protoc compiler library, for building protoc plugins on the host.
if (current_toolchain == host_toolchain) {
group("protoc_lib_deps") {
diff --git a/include/perfetto/base/string_utils.h b/include/perfetto/base/string_utils.h
index d2f9a36..bec695b 100644
--- a/include/perfetto/base/string_utils.h
+++ b/include/perfetto/base/string_utils.h
@@ -26,6 +26,7 @@
bool StartsWith(const std::string& str, const std::string& prefix);
bool EndsWith(const std::string& str, const std::string& suffix);
bool Contains(const std::string& haystack, const std::string& needle);
+bool CaseInsensitiveEqual(const std::string& first, const std::string& second);
std::string Join(const std::vector<std::string>& parts,
const std::string& delim);
std::vector<std::string> SplitString(const std::string& text,
diff --git a/src/base/string_utils.cc b/src/base/string_utils.cc
index 41df6b6..6616364 100644
--- a/src/base/string_utils.cc
+++ b/src/base/string_utils.cc
@@ -37,6 +37,12 @@
return haystack.find(needle) != std::string::npos;
}
+bool CaseInsensitiveEqual(const std::string& first, const std::string& second) {
+ return first.size() == second.size() &&
+ std::equal(first.begin(), first.end(), second.begin(),
+ [](char a, char b) { return tolower(a) == tolower(b); });
+}
+
std::string Join(const std::vector<std::string>& parts,
const std::string& delim) {
std::string acc;
diff --git a/src/base/string_utils_unittest.cc b/src/base/string_utils_unittest.cc
index bed511f..ddaa5ce 100644
--- a/src/base/string_utils_unittest.cc
+++ b/src/base/string_utils_unittest.cc
@@ -47,6 +47,15 @@
EXPECT_FALSE(EndsWith("", "c"));
}
+TEST(StringUtilsTest, CaseInsensitiveEqual) {
+ EXPECT_TRUE(CaseInsensitiveEqual("", ""));
+ EXPECT_TRUE(CaseInsensitiveEqual("abc", "abc"));
+ EXPECT_TRUE(CaseInsensitiveEqual("ABC", "abc"));
+ EXPECT_TRUE(CaseInsensitiveEqual("abc", "ABC"));
+ EXPECT_FALSE(CaseInsensitiveEqual("abc", "AB"));
+ EXPECT_FALSE(CaseInsensitiveEqual("ab", "ABC"));
+}
+
TEST(StringUtilsTest, SplitString) {
EXPECT_THAT(SplitString("", ":"), ElementsAre(""));
EXPECT_THAT(SplitString("a:b:c", ":"), ElementsAre("a", "b", "c"));
diff --git a/src/trace_processor/BUILD.gn b/src/trace_processor/BUILD.gn
index 6ef7285..e4fda49 100644
--- a/src/trace_processor/BUILD.gn
+++ b/src/trace_processor/BUILD.gn
@@ -16,21 +16,23 @@
import("../../gn/perfetto.gni")
import("../../gn/wasm.gni")
-wasm_lib("trace_processor_wasm") {
- name = "trace_processor"
- sources = [
- "wasm_bridge.cc",
- ]
+if (perfetto_build_standalone) {
+ wasm_lib("trace_processor_wasm") {
+ name = "trace_processor"
+ sources = [
+ "wasm_bridge.cc",
+ ]
- # All the deps below are implicitly xxx($wasm_toolchain) because of the
- # outer "is_wasm" block.
- deps = [
- ":lib",
- "../../buildtools:sqlite",
- "../../gn:default_deps",
- "../../include/perfetto/base",
- "../../protos/perfetto/trace_processor:lite",
- ]
+ # All the deps below are implicitly xxx($wasm_toolchain) because of the
+ # outer "is_wasm" block.
+ deps = [
+ ":lib",
+ "../../buildtools:sqlite",
+ "../../gn:default_deps",
+ "../../include/perfetto/base",
+ "../../protos/perfetto/trace_processor:lite",
+ ]
+ }
}
# The library which eases processing of Perfetto traces by exposing reading
@@ -158,8 +160,8 @@
]
deps = [
- "../../buildtools:sqlite",
"../../gn:default_deps",
+ "../../gn:sqlite",
"../../include/perfetto/traced:sys_stats_counters",
"../../protos/perfetto/common:zero",
"../../protos/perfetto/config:zero",
@@ -268,9 +270,9 @@
]
deps = [
":lib",
- "../../buildtools:sqlite",
"../../gn:default_deps",
"../../gn:gtest_deps",
+ "../../gn:sqlite",
"../../protos/perfetto/common:zero",
"../../protos/perfetto/trace:zero",
"../../protos/perfetto/trace/chrome:zero",
@@ -299,9 +301,9 @@
]
deps = [
":lib",
- "../../buildtools:sqlite",
"../../gn:default_deps",
"../../gn:gtest_deps",
+ "../../gn:sqlite",
"../../protos/perfetto/trace:lite",
"../../protos/perfetto/trace_processor:lite",
"../base",
diff --git a/src/trace_processor/metrics/BUILD.gn b/src/trace_processor/metrics/BUILD.gn
index f0a7a2b..0b602a7 100644
--- a/src/trace_processor/metrics/BUILD.gn
+++ b/src/trace_processor/metrics/BUILD.gn
@@ -51,8 +51,8 @@
"metrics.h",
]
deps = [
- "../../../buildtools:sqlite",
"../../../gn:default_deps",
+ "../../../gn:sqlite",
"../../../include/perfetto/trace_processor",
"../../../protos/perfetto/common:zero",
"../../../protos/perfetto/metrics:zero",
@@ -72,9 +72,9 @@
]
deps = [
":lib",
- "../../../buildtools:sqlite",
"../../../gn:default_deps",
"../../../gn:gtest_deps",
+ "../../../gn:sqlite",
"../../../protos/perfetto/common:zero",
]
}
diff --git a/src/trace_processor/metrics/metrics.h b/src/trace_processor/metrics/metrics.h
index cf41db9..e82820a 100644
--- a/src/trace_processor/metrics/metrics.h
+++ b/src/trace_processor/metrics/metrics.h
@@ -17,7 +17,6 @@
#ifndef SRC_TRACE_PROCESSOR_METRICS_METRICS_H_
#define SRC_TRACE_PROCESSOR_METRICS_METRICS_H_
-#include <sqlite3.h>
#include <unordered_map>
#include <vector>
@@ -28,6 +27,7 @@
#include "perfetto/trace_processor/trace_processor.h"
#include "src/trace_processor/metrics/descriptors.h"
+#include "src/trace_processor/sqlite.h"
#include "perfetto/trace_processor/metrics_impl.pbzero.h"
diff --git a/src/trace_processor/query_constraints.cc b/src/trace_processor/query_constraints.cc
index 9092cb7..5d005e4 100644
--- a/src/trace_processor/query_constraints.cc
+++ b/src/trace_processor/query_constraints.cc
@@ -16,10 +16,10 @@
#include "src/trace_processor/query_constraints.h"
-#include <sqlite3.h>
#include <string>
#include "perfetto/base/string_splitter.h"
+#include "src/trace_processor/sqlite.h"
namespace perfetto {
namespace trace_processor {
diff --git a/src/trace_processor/query_constraints.h b/src/trace_processor/query_constraints.h
index e9dc48b..2a708dd 100644
--- a/src/trace_processor/query_constraints.h
+++ b/src/trace_processor/query_constraints.h
@@ -17,11 +17,10 @@
#ifndef SRC_TRACE_PROCESSOR_QUERY_CONSTRAINTS_H_
#define SRC_TRACE_PROCESSOR_QUERY_CONSTRAINTS_H_
-#include <sqlite3.h>
-
#include <vector>
#include "perfetto/base/scoped_file.h"
+#include "src/trace_processor/sqlite.h"
namespace perfetto {
namespace trace_processor {
diff --git a/src/trace_processor/scoped_db.h b/src/trace_processor/scoped_db.h
index 7c1e44f..af7b61e 100644
--- a/src/trace_processor/scoped_db.h
+++ b/src/trace_processor/scoped_db.h
@@ -18,12 +18,13 @@
#define SRC_TRACE_PROCESSOR_SCOPED_DB_H_
#include "perfetto/base/scoped_file.h"
+#include "src/trace_processor/sqlite.h"
extern "C" {
struct sqlite3;
struct sqlite3_stmt;
-extern int sqlite3_close(sqlite3*);
-extern int sqlite3_finalize(sqlite3_stmt* pStmt);
+SQLITE_API extern int sqlite3_close(sqlite3*);
+SQLITE_API extern int sqlite3_finalize(sqlite3_stmt* pStmt);
}
namespace perfetto {
diff --git a/src/trace_processor/slice_tracker.cc b/src/trace_processor/slice_tracker.cc
index caf8b24..b5c6558 100644
--- a/src/trace_processor/slice_tracker.cc
+++ b/src/trace_processor/slice_tracker.cc
@@ -29,7 +29,7 @@
// Slices which have been opened but haven't been closed yet will be marked
// with this duration placeholder.
constexpr int64_t kPendingDuration = -1;
-}; // namespace
+} // namespace
SliceTracker::SliceTracker(TraceProcessorContext* context)
: context_(context) {}
diff --git a/src/trace_processor/span_join_operator_table.cc b/src/trace_processor/span_join_operator_table.cc
index c5a7973..8b907f3 100644
--- a/src/trace_processor/span_join_operator_table.cc
+++ b/src/trace_processor/span_join_operator_table.cc
@@ -16,7 +16,6 @@
#include "src/trace_processor/span_join_operator_table.h"
-#include <sqlite3.h>
#include <string.h>
#include <algorithm>
#include <set>
@@ -26,6 +25,7 @@
#include "perfetto/base/string_splitter.h"
#include "perfetto/base/string_utils.h"
#include "perfetto/base/string_view.h"
+#include "src/trace_processor/sqlite.h"
#include "src/trace_processor/sqlite_utils.h"
namespace perfetto {
@@ -710,7 +710,7 @@
if (!splitter.Next())
return util::OkStatus();
- if (strcasecmp(splitter.cur_token(), "PARTITIONED") != 0)
+ if (!base::CaseInsensitiveEqual(splitter.cur_token(), "PARTITIONED"))
return util::ErrStatus("SPAN_JOIN: Invalid token");
if (!splitter.Next())
diff --git a/src/trace_processor/span_join_operator_table.h b/src/trace_processor/span_join_operator_table.h
index 27cc5db..d56043c 100644
--- a/src/trace_processor/span_join_operator_table.h
+++ b/src/trace_processor/span_join_operator_table.h
@@ -17,7 +17,6 @@
#ifndef SRC_TRACE_PROCESSOR_SPAN_JOIN_OPERATOR_TABLE_H_
#define SRC_TRACE_PROCESSOR_SPAN_JOIN_OPERATOR_TABLE_H_
-#include <sqlite3.h>
#include <array>
#include <deque>
#include <limits>
@@ -29,6 +28,7 @@
#include "perfetto/trace_processor/basic_types.h"
#include "src/trace_processor/scoped_db.h"
+#include "src/trace_processor/sqlite.h"
#include "src/trace_processor/table.h"
namespace perfetto {
diff --git a/src/trace_processor/sql_stats_table.cc b/src/trace_processor/sql_stats_table.cc
index f81ac66..fdd2467 100644
--- a/src/trace_processor/sql_stats_table.cc
+++ b/src/trace_processor/sql_stats_table.cc
@@ -16,12 +16,11 @@
#include "src/trace_processor/sql_stats_table.h"
-#include <sqlite3.h>
-
#include <algorithm>
#include <bitset>
#include <numeric>
+#include "src/trace_processor/sqlite.h"
#include "src/trace_processor/sqlite_utils.h"
#include "src/trace_processor/trace_storage.h"
diff --git a/src/trace_processor/sqlite.h b/src/trace_processor/sqlite.h
new file mode 100644
index 0000000..09c66a9
--- /dev/null
+++ b/src/trace_processor/sqlite.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SRC_TRACE_PROCESSOR_SQLITE_H_
+#define SRC_TRACE_PROCESSOR_SQLITE_H_
+
+#if PERFETTO_BUILDFLAG(PERFETTO_STANDALONE_BUILD) || \
+ PERFETTO_BUILDFLAG(PERFETTO_ANDROID_BUILD)
+#include <sqlite3.h>
+#else
+#include "third_party/sqlite/sqlite3.h"
+#endif
+
+#endif // SRC_TRACE_PROCESSOR_SQLITE_H_
diff --git a/src/trace_processor/sqlite3_str_split_unittest.cc b/src/trace_processor/sqlite3_str_split_unittest.cc
index 4896f27..46f0f36 100644
--- a/src/trace_processor/sqlite3_str_split_unittest.cc
+++ b/src/trace_processor/sqlite3_str_split_unittest.cc
@@ -16,10 +16,10 @@
#include "src/trace_processor/sqlite3_str_split.h"
-#include <sqlite3.h>
#include <string>
#include "perfetto/base/logging.h"
#include "src/trace_processor/scoped_db.h"
+#include "src/trace_processor/sqlite.h"
#include "gtest/gtest.h"
diff --git a/src/trace_processor/sqlite_utils.h b/src/trace_processor/sqlite_utils.h
index 5bd1e5f..0be5af1 100644
--- a/src/trace_processor/sqlite_utils.h
+++ b/src/trace_processor/sqlite_utils.h
@@ -18,7 +18,6 @@
#define SRC_TRACE_PROCESSOR_SQLITE_UTILS_H_
#include <math.h>
-#include <sqlite3.h>
#include <functional>
#include <limits>
@@ -27,6 +26,7 @@
#include "perfetto/base/logging.h"
#include "perfetto/base/optional.h"
#include "src/trace_processor/scoped_db.h"
+#include "src/trace_processor/sqlite.h"
#include "src/trace_processor/table.h"
namespace perfetto {
diff --git a/src/trace_processor/string_table.cc b/src/trace_processor/string_table.cc
index 0007296..407b838 100644
--- a/src/trace_processor/string_table.cc
+++ b/src/trace_processor/string_table.cc
@@ -16,13 +16,13 @@
#include "src/trace_processor/string_table.h"
-#include <sqlite3.h>
#include <string.h>
#include <algorithm>
#include <bitset>
#include <numeric>
+#include "src/trace_processor/sqlite.h"
#include "src/trace_processor/sqlite_utils.h"
#include "src/trace_processor/trace_storage.h"
diff --git a/src/trace_processor/table.h b/src/trace_processor/table.h
index 0405eb9..aea0a94 100644
--- a/src/trace_processor/table.h
+++ b/src/trace_processor/table.h
@@ -17,8 +17,6 @@
#ifndef SRC_TRACE_PROCESSOR_TABLE_H_
#define SRC_TRACE_PROCESSOR_TABLE_H_
-#include <sqlite3.h>
-
#include <functional>
#include <memory>
#include <string>
@@ -27,6 +25,7 @@
#include "perfetto/base/optional.h"
#include "perfetto/trace_processor/basic_types.h"
#include "src/trace_processor/query_constraints.h"
+#include "src/trace_processor/sqlite.h"
namespace perfetto {
namespace trace_processor {
diff --git a/src/trace_processor/trace_processor_impl.h b/src/trace_processor/trace_processor_impl.h
index ee2c055..6f20688 100644
--- a/src/trace_processor/trace_processor_impl.h
+++ b/src/trace_processor/trace_processor_impl.h
@@ -17,7 +17,6 @@
#ifndef SRC_TRACE_PROCESSOR_TRACE_PROCESSOR_IMPL_H_
#define SRC_TRACE_PROCESSOR_TRACE_PROCESSOR_IMPL_H_
-#include <sqlite3.h>
#include <atomic>
#include <functional>
#include <memory>
@@ -29,6 +28,7 @@
#include "src/trace_processor/metrics/descriptors.h"
#include "src/trace_processor/metrics/metrics.h"
#include "src/trace_processor/scoped_db.h"
+#include "src/trace_processor/sqlite.h"
#include "src/trace_processor/trace_processor_context.h"
namespace perfetto {