Rename StringWriter to FixedStringWriter It makes it clearer that it writes the data into a pre-existing buffer rather than allocating a string.
diff --git a/Android.bp b/Android.bp index 104a3af..381b325 100644 --- a/Android.bp +++ b/Android.bp
@@ -12375,6 +12375,7 @@ "src/base/base64_unittest.cc", "src/base/bits_unittest.cc", "src/base/circular_queue_unittest.cc", + "src/base/fixed_string_writer_unittest.cc", "src/base/flags_unittest.cc", "src/base/flat_hash_map_unittest.cc", "src/base/flat_set_unittest.cc", @@ -12399,7 +12400,6 @@ "src/base/string_utils_unittest.cc", "src/base/string_view_splitter_unittest.cc", "src/base/string_view_unittest.cc", - "src/base/string_writer_unittest.cc", "src/base/subprocess_unittest.cc", "src/base/task_runner_unittest.cc", "src/base/temp_file_unittest.cc",
diff --git a/BUILD b/BUILD index 5ac196e..ccb583d 100644 --- a/BUILD +++ b/BUILD
@@ -835,6 +835,7 @@ "include/perfetto/ext/base/endian.h", "include/perfetto/ext/base/event_fd.h", "include/perfetto/ext/base/file_utils.h", + "include/perfetto/ext/base/fixed_string_writer.h", "include/perfetto/ext/base/flags.h", "include/perfetto/ext/base/flat_hash_map.h", "include/perfetto/ext/base/fnv_hash.h", @@ -862,7 +863,6 @@ "include/perfetto/ext/base/string_utils.h", "include/perfetto/ext/base/string_view.h", "include/perfetto/ext/base/string_view_splitter.h", - "include/perfetto/ext/base/string_writer.h", "include/perfetto/ext/base/subprocess.h", "include/perfetto/ext/base/sys_types.h", "include/perfetto/ext/base/temp_file.h",
diff --git a/include/perfetto/ext/base/BUILD.gn b/include/perfetto/ext/base/BUILD.gn index 62ec0c7..0c3f792 100644 --- a/include/perfetto/ext/base/BUILD.gn +++ b/include/perfetto/ext/base/BUILD.gn
@@ -27,6 +27,7 @@ "endian.h", "event_fd.h", "file_utils.h", + "fixed_string_writer.h", "flags.h", "flat_hash_map.h", "fnv_hash.h", @@ -54,7 +55,6 @@ "string_utils.h", "string_view.h", "string_view_splitter.h", - "string_writer.h", "subprocess.h", "sys_types.h", "temp_file.h",
diff --git a/include/perfetto/ext/base/string_writer.h b/include/perfetto/ext/base/fixed_string_writer.h similarity index 95% rename from include/perfetto/ext/base/string_writer.h rename to include/perfetto/ext/base/fixed_string_writer.h index 587b2f9..64747af 100644 --- a/include/perfetto/ext/base/string_writer.h +++ b/include/perfetto/ext/base/fixed_string_writer.h
@@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef INCLUDE_PERFETTO_EXT_BASE_STRING_WRITER_H_ -#define INCLUDE_PERFETTO_EXT_BASE_STRING_WRITER_H_ +#ifndef INCLUDE_PERFETTO_EXT_BASE_FIXED_STRING_WRITER_H_ +#define INCLUDE_PERFETTO_EXT_BASE_FIXED_STRING_WRITER_H_ #include <string.h> @@ -34,10 +34,10 @@ // A helper class which writes formatted data to a string buffer. // This is used in the trace processor where we write O(GBs) of strings and // sprintf is too slow. -class StringWriter { +class FixedStringWriter { public: // Creates a string buffer from a char buffer and length. - StringWriter(char* buffer, size_t size) : buffer_(buffer), size_(size) {} + FixedStringWriter(char* buffer, size_t size) : buffer_(buffer), size_(size) {} // Appends n instances of a char to the buffer. void AppendChar(char in, size_t n = 1) { @@ -180,4 +180,4 @@ } // namespace base } // namespace perfetto -#endif // INCLUDE_PERFETTO_EXT_BASE_STRING_WRITER_H_ +#endif // INCLUDE_PERFETTO_EXT_BASE_FIXED_STRING_WRITER_H_
diff --git a/src/base/BUILD.gn b/src/base/BUILD.gn index de12aba..403578f 100644 --- a/src/base/BUILD.gn +++ b/src/base/BUILD.gn
@@ -212,6 +212,7 @@ "base64_unittest.cc", "bits_unittest.cc", "circular_queue_unittest.cc", + "fixed_string_writer_unittest.cc", "flags_unittest.cc", "flat_hash_map_unittest.cc", "flat_set_unittest.cc", @@ -235,7 +236,6 @@ "string_utils_unittest.cc", "string_view_splitter_unittest.cc", "string_view_unittest.cc", - "string_writer_unittest.cc", "task_runner_unittest.cc", "temp_file_unittest.cc", "thread_checker_unittest.cc",
diff --git a/src/base/string_writer_unittest.cc b/src/base/fixed_string_writer_unittest.cc similarity index 73% rename from src/base/string_writer_unittest.cc rename to src/base/fixed_string_writer_unittest.cc index 1df52bf..c49e0da 100644 --- a/src/base/string_writer_unittest.cc +++ b/src/base/fixed_string_writer_unittest.cc
@@ -14,7 +14,7 @@ * limitations under the License. */ -#include "perfetto/ext/base/string_writer.h" +#include "perfetto/ext/base/fixed_string_writer.h" #include "test/gtest_and_gmock.h" @@ -22,111 +22,111 @@ namespace base { namespace { -TEST(StringWriterTest, BasicCases) { +TEST(FixedStringWriterTest, BasicCases) { char buffer[128]; { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendChar('0'); ASSERT_EQ(writer.GetStringView().ToStdString(), "0"); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendInt(132545); ASSERT_EQ(writer.GetStringView().ToStdString(), "132545"); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendUnsignedInt(523); ASSERT_EQ(writer.GetStringView().ToStdString(), "523"); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendPaddedInt<'0', 3>(0); ASSERT_EQ(writer.GetStringView().ToStdString(), "000"); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendPaddedInt<'0', 1>(1); ASSERT_EQ(writer.GetStringView().ToStdString(), "1"); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendPaddedInt<'0', 3>(1); ASSERT_EQ(writer.GetStringView().ToStdString(), "001"); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendPaddedInt<'0', 0>(1); ASSERT_EQ(writer.GetStringView().ToStdString(), "1"); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendPaddedInt<' ', 5>(123); ASSERT_EQ(writer.GetStringView().ToStdString(), " 123"); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendPaddedUnsignedInt<' ', 5>(123); ASSERT_EQ(writer.GetStringView().ToStdString(), " 123"); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendDouble(123.25); ASSERT_EQ(writer.GetStringView().ToStdString(), "123.250000"); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendInt(std::numeric_limits<int64_t>::min()); ASSERT_EQ(writer.GetStringView().ToStdString(), "-9223372036854775808"); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendInt(std::numeric_limits<int64_t>::max()); ASSERT_EQ(writer.GetStringView().ToStdString(), "9223372036854775807"); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendUnsignedInt(std::numeric_limits<uint64_t>::max()); ASSERT_EQ(writer.GetStringView().ToStdString(), "18446744073709551615"); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendBool(true); ASSERT_EQ(writer.GetStringView().ToStdString(), "true"); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendBool(false); ASSERT_EQ(writer.GetStringView().ToStdString(), "false"); } constexpr char kTestStr[] = "test"; { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendLiteral(kTestStr); ASSERT_EQ(writer.GetStringView().ToStdString(), kTestStr); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendString(kTestStr, sizeof(kTestStr) - 1); ASSERT_EQ(writer.GetStringView().ToStdString(), kTestStr); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendString(kTestStr); ASSERT_EQ(writer.GetStringView().ToStdString(), kTestStr); } { - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendChar('x', sizeof(buffer)); ASSERT_EQ(writer.GetStringView().ToStdString(), std::string(sizeof(buffer), 'x').c_str()); } } -TEST(StringWriterTest, WriteAllTypes) { +TEST(FixedStringWriterTest, WriteAllTypes) { char buffer[128]; - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendChar('0'); writer.AppendInt(132545); writer.AppendUnsignedInt(523);
diff --git a/src/profiling/symbolizer/breakpad_parser.cc b/src/profiling/symbolizer/breakpad_parser.cc index 5f767b7..b409bb7 100644 --- a/src/profiling/symbolizer/breakpad_parser.cc +++ b/src/profiling/symbolizer/breakpad_parser.cc
@@ -19,9 +19,9 @@ #include "perfetto/base/logging.h" #include "perfetto/ext/base/file_utils.h" +#include "perfetto/ext/base/fixed_string_writer.h" #include "perfetto/ext/base/string_splitter.h" #include "perfetto/ext/base/string_utils.h" -#include "perfetto/ext/base/string_writer.h" namespace perfetto { namespace profiling { @@ -235,7 +235,8 @@ // considered a part of the function name and will be appended to the buffer // in |func_name_writer|. std::unique_ptr<char[]> joined_string(new char[current_line.size()]); - base::StringWriter func_name_writer(joined_string.get(), current_line.size()); + base::FixedStringWriter func_name_writer(joined_string.get(), + current_line.size()); bool first_token = true; while (words.Next()) { if (!first_token) {
diff --git a/src/tools/dump_ftrace_stats/main.cc b/src/tools/dump_ftrace_stats/main.cc index 9841b53..37f09aa 100644 --- a/src/tools/dump_ftrace_stats/main.cc +++ b/src/tools/dump_ftrace_stats/main.cc
@@ -17,10 +17,10 @@ #include <signal.h> #include "perfetto/ext/base/file_utils.h" +#include "perfetto/ext/base/fixed_string_writer.h" #include "perfetto/ext/base/lock_free_task_runner.h" #include "perfetto/ext/base/string_splitter.h" #include "perfetto/ext/base/string_utils.h" -#include "perfetto/ext/base/string_writer.h" #include "perfetto/ext/base/utils.h" namespace perfetto { @@ -78,7 +78,7 @@ char buffer[1024]; base::StringSplitter splitter(std::move(text), '\n'); while (splitter.Next()) { - base::StringWriter writer(buffer, base::ArraySize(buffer)); + base::FixedStringWriter writer(buffer, base::ArraySize(buffer)); writer.AppendLiteral("C|"); writer.AppendInt(getpid()); writer.AppendLiteral("|");
diff --git a/src/trace_processor/importers/proto/gpu_event_parser.cc b/src/trace_processor/importers/proto/gpu_event_parser.cc index 85dc817..1aceb16 100644 --- a/src/trace_processor/importers/proto/gpu_event_parser.cc +++ b/src/trace_processor/importers/proto/gpu_event_parser.cc
@@ -25,9 +25,9 @@ #include <vector> #include "perfetto/base/logging.h" +#include "perfetto/ext/base/fixed_string_writer.h" #include "perfetto/ext/base/string_utils.h" #include "perfetto/ext/base/string_view.h" -#include "perfetto/ext/base/string_writer.h" #include "perfetto/protozero/field.h" #include "src/trace_processor/importers/common/args_tracker.h" #include "src/trace_processor/importers/common/event_tracker.h" @@ -179,7 +179,7 @@ StringId unit_id = kNullStringId; if (spec.has_numerator_units() || spec.has_denominator_units()) { char buffer[1024]; - base::StringWriter unit(buffer, sizeof(buffer)); + base::FixedStringWriter unit(buffer, sizeof(buffer)); for (auto number = spec.numerator_units(); number; ++number) { if (unit.pos()) { unit.AppendChar(':'); @@ -343,7 +343,7 @@ return kNullStringId; } char buf[256]; - base::StringWriter writer(buf, sizeof(buf)); + base::FixedStringWriter writer(buf, sizeof(buf)); uint32_t bit_index = 0; bool first = true; for (auto it = event.render_subpass_index_mask(); it; ++it) {
diff --git a/src/trace_processor/importers/proto/proto_trace_parser_impl.cc b/src/trace_processor/importers/proto/proto_trace_parser_impl.cc index 57080b8..8af38e9 100644 --- a/src/trace_processor/importers/proto/proto_trace_parser_impl.cc +++ b/src/trace_processor/importers/proto/proto_trace_parser_impl.cc
@@ -24,10 +24,10 @@ #include <vector> #include "perfetto/base/logging.h" +#include "perfetto/ext/base/fixed_string_writer.h" #include "perfetto/ext/base/metatrace_events.h" #include "perfetto/ext/base/string_utils.h" #include "perfetto/ext/base/string_view.h" -#include "perfetto/ext/base/string_writer.h" #include "perfetto/trace_processor/trace_blob_view.h" #include "src/trace_processor/containers/null_term_string_view.h" #include "src/trace_processor/importers/common/args_tracker.h" @@ -176,7 +176,7 @@ args.AddArgsTo(id).AddArg(name_id, value); char buffer[2048]; - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendString("cr-"); // If we have data from multiple Chrome instances, append a suffix // to differentiate them.
diff --git a/src/trace_processor/importers/proto/track_event_event_importer.h b/src/trace_processor/importers/proto/track_event_event_importer.h index eb397c1..dd39813 100644 --- a/src/trace_processor/importers/proto/track_event_event_importer.h +++ b/src/trace_processor/importers/proto/track_event_event_importer.h
@@ -27,11 +27,11 @@ #include "perfetto/base/logging.h" #include "perfetto/base/status.h" +#include "perfetto/ext/base/fixed_string_writer.h" #include "perfetto/ext/base/status_macros.h" #include "perfetto/ext/base/status_or.h" #include "perfetto/ext/base/string_utils.h" #include "perfetto/ext/base/string_view.h" -#include "perfetto/ext/base/string_writer.h" #include "perfetto/protozero/field.h" #include "perfetto/protozero/proto_decoder.h" #include "perfetto/public/compiler.h" @@ -261,7 +261,7 @@ category_id = storage_->InternString(decoder->name()); } else { char buffer[32]; - base::StringWriter writer(buffer, sizeof(buffer)); + base::FixedStringWriter writer(buffer, sizeof(buffer)); writer.AppendLiteral("unknown("); writer.AppendUnsignedInt(category_iids[0]); writer.AppendChar(')');
diff --git a/src/trace_processor/perfetto_sql/intrinsics/functions/to_ftrace.cc b/src/trace_processor/perfetto_sql/intrinsics/functions/to_ftrace.cc index 58a7544..ce8c006 100644 --- a/src/trace_processor/perfetto_sql/intrinsics/functions/to_ftrace.cc +++ b/src/trace_processor/perfetto_sql/intrinsics/functions/to_ftrace.cc
@@ -25,8 +25,8 @@ #include "perfetto/base/logging.h" #include "perfetto/base/status.h" +#include "perfetto/ext/base/fixed_string_writer.h" #include "perfetto/ext/base/string_view.h" -#include "perfetto/ext/base/string_writer.h" #include "perfetto/public/compiler.h" #include "perfetto/trace_processor/basic_types.h" #include "src/trace_processor/containers/null_term_string_view.h" @@ -80,7 +80,7 @@ tables::ArgTable::ConstCursor*, NullTermStringView event_name, std::vector<std::optional<uint32_t>>* field_id_to_arg_index, - base::StringWriter*); + base::FixedStringWriter*); void SerializeArgs(); @@ -155,7 +155,7 @@ uint32_t start_row_ = 0; - base::StringWriter* writer_ = nullptr; + base::FixedStringWriter* writer_ = nullptr; }; ArgsSerializer::ArgsSerializer( @@ -164,7 +164,7 @@ tables::ArgTable::ConstCursor* cursor, NullTermStringView event_name, std::vector<std::optional<uint32_t>>* field_id_to_arg_index, - base::StringWriter* writer) + base::FixedStringWriter* writer) : storage_(context->storage.get()), context_(context), cursor_(cursor), @@ -632,7 +632,7 @@ const auto& raw = storage_->ftrace_event_table(); char line[4096]; - base::StringWriter writer(line, sizeof(line)); + base::FixedStringWriter writer(line, sizeof(line)); auto row = raw[raw_row]; StringId event_name_id = row.name(); @@ -662,7 +662,7 @@ } void SystraceSerializer::SerializePrefix(uint32_t raw_row, - base::StringWriter* writer) { + base::FixedStringWriter* writer) { const auto& raw = storage_->ftrace_event_table(); const auto& cpu_table = storage_->cpu_table();
diff --git a/src/trace_processor/perfetto_sql/intrinsics/functions/to_ftrace.h b/src/trace_processor/perfetto_sql/intrinsics/functions/to_ftrace.h index a2bdbd8..f0154d4 100644 --- a/src/trace_processor/perfetto_sql/intrinsics/functions/to_ftrace.h +++ b/src/trace_processor/perfetto_sql/intrinsics/functions/to_ftrace.h
@@ -24,8 +24,8 @@ #include <vector> #include "perfetto/base/status.h" +#include "perfetto/ext/base/fixed_string_writer.h" #include "perfetto/ext/base/flat_hash_map.h" -#include "perfetto/ext/base/string_writer.h" #include "perfetto/trace_processor/basic_types.h" #include "src/trace_processor/perfetto_sql/intrinsics/functions/sql_function.h" #include "src/trace_processor/storage/trace_storage.h" @@ -46,7 +46,7 @@ using StringIdMap = base::FlatHashMap<StringId, std::vector<std::optional<uint32_t>>>; - void SerializePrefix(uint32_t raw_row, base::StringWriter* writer); + void SerializePrefix(uint32_t raw_row, base::FixedStringWriter* writer); StringIdMap proto_id_to_arg_index_by_event_; const TraceStorage* storage_ = nullptr;
diff --git a/src/trace_processor/types/gfp_flags.cc b/src/trace_processor/types/gfp_flags.cc index a27ab10..b73fed6 100644 --- a/src/trace_processor/types/gfp_flags.cc +++ b/src/trace_processor/types/gfp_flags.cc
@@ -216,7 +216,7 @@ void WriteGfpFlag(uint64_t value, std::optional<VersionNumber> version, - base::StringWriter* writer) { + base::FixedStringWriter* writer) { // On all kernel versions if this flag is not set, return GFP_NOWAIT. if (value == 0) { writer->AppendString("GFP_NOWAIT");
diff --git a/src/trace_processor/types/gfp_flags.h b/src/trace_processor/types/gfp_flags.h index 04936a8..70f11b4 100644 --- a/src/trace_processor/types/gfp_flags.h +++ b/src/trace_processor/types/gfp_flags.h
@@ -19,7 +19,7 @@ #include <optional> -#include "perfetto/ext/base/string_writer.h" +#include "perfetto/ext/base/fixed_string_writer.h" #include "src/trace_processor/types/version_number.h" namespace perfetto { @@ -30,7 +30,7 @@ // flag. void WriteGfpFlag(uint64_t value, std::optional<VersionNumber> version, - base::StringWriter* writer); + base::FixedStringWriter* writer); } // namespace trace_processor } // namespace perfetto
diff --git a/src/traceconv/trace_to_systrace.cc b/src/traceconv/trace_to_systrace.cc index d4c596a..08331c9 100644 --- a/src/traceconv/trace_to_systrace.cc +++ b/src/traceconv/trace_to_systrace.cc
@@ -27,8 +27,8 @@ #include "perfetto/base/build_config.h" #include "perfetto/base/logging.h" +#include "perfetto/ext/base/fixed_string_writer.h" #include "perfetto/ext/base/string_utils.h" -#include "perfetto/ext/base/string_writer.h" #include "perfetto/ext/base/utils.h" #include "perfetto/trace_processor/trace_processor.h" #include "src/traceconv/utils.h" @@ -85,7 +85,7 @@ inline void FormatProcess(uint32_t pid, uint32_t ppid, const base::StringView& name, - base::StringWriter* writer) { + base::FixedStringWriter* writer) { writer->AppendLiteral("root "); writer->AppendInt(pid); writer->AppendLiteral(" "); @@ -98,7 +98,7 @@ inline void FormatThread(uint32_t tid, uint32_t tgid, const base::StringView& name, - base::StringWriter* writer) { + base::FixedStringWriter* writer) { writer->AppendLiteral("root "); writer->AppendInt(tgid); writer->AppendChar(' '); @@ -124,7 +124,7 @@ char buffer[2048]; auto iterator = tp_->ExecuteQuery(sql); for (uint32_t rows = 0; iterator.Next(); rows++) { - base::StringWriter line_writer(buffer, base::ArraySize(buffer)); + base::FixedStringWriter line_writer(buffer, base::ArraySize(buffer)); callback(&iterator, &line_writer); if (global_writer_.pos() + line_writer.pos() >= global_writer_.size()) { @@ -155,7 +155,7 @@ trace_processor::TraceProcessor* tp_ = nullptr; base::PagedMemory buffer_; - base::StringWriter global_writer_; + base::FixedStringWriter global_writer_; TraceWriter* trace_writer_; }; @@ -167,7 +167,7 @@ static const char kRawEventsCountSql[] = "select count(1) from ftrace_event"; uint32_t raw_events = 0; - auto e_callback = [&raw_events](Iterator* it, base::StringWriter*) { + auto e_callback = [&raw_events](Iterator* it, base::FixedStringWriter*) { raw_events = static_cast<uint32_t>(it->Get(0).long_value); }; if (!q_writer.RunQuery(kRawEventsCountSql, e_callback)) @@ -186,7 +186,7 @@ fflush(stderr); auto raw_callback = [wrapped_in_json](Iterator* it, - base::StringWriter* writer) { + base::FixedStringWriter* writer) { const char* line = it->Get(0 /* col */).string_value; if (wrapped_in_json) { for (uint32_t i = 0; line[i] != '\0'; i++) { @@ -310,7 +310,7 @@ // TODO(lalitm): change this query to actually use ppid when it is exposed // by the process table. static const char kPSql[] = "select pid, 0 as ppid, name from process"; - auto p_callback = [](Iterator* it, base::StringWriter* writer) { + auto p_callback = [](Iterator* it, base::FixedStringWriter* writer) { uint32_t pid = static_cast<uint32_t>(it->Get(0 /* col */).long_value); uint32_t ppid = static_cast<uint32_t>(it->Get(1 /* col */).long_value); const auto& name_col = it->Get(2 /* col */); @@ -328,7 +328,7 @@ static const char kTSql[] = "select tid, COALESCE(upid, 0), thread.name " "from thread left join process using (upid)"; - auto t_callback = [](Iterator* it, base::StringWriter* writer) { + auto t_callback = [](Iterator* it, base::FixedStringWriter* writer) { uint32_t tid = static_cast<uint32_t>(it->Get(0 /* col */).long_value); uint32_t tgid = static_cast<uint32_t>(it->Get(1 /* col */).long_value); const auto& name_col = it->Get(2 /* col */);