Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1cafe2d0 authored by Vishnu Nair's avatar Vishnu Nair Committed by Android (Google) Code Review
Browse files

Merge "Modify sftrace macros to go through tracing_perfetto lib" into main

parents 574dfc09 47b6e688
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -14,8 +14,7 @@
 * limitations under the License.
 */

#ifndef TRACING_PERFETTO_H
#define TRACING_PERFETTO_H
#pragma once

#include <stdint.h>

@@ -29,6 +28,8 @@ void traceEnd(uint64_t category);

void traceAsyncBegin(uint64_t category, const char* name, int32_t cookie);

void traceFormatBegin(uint64_t category, const char* fmt, ...);

void traceAsyncEnd(uint64_t category, const char* name, int32_t cookie);

void traceAsyncBeginForTrack(uint64_t category, const char* name,
@@ -39,12 +40,14 @@ void traceAsyncEndForTrack(uint64_t category, const char* trackName,

void traceInstant(uint64_t category, const char* name);

void traceFormatInstant(uint64_t category, const char* fmt, ...);

void traceInstantForTrack(uint64_t category, const char* trackName,
                            const char* name);

void traceCounter(uint64_t category, const char* name, int64_t value);

void traceCounter32(uint64_t category, const char* name, int32_t value);

bool isTagEnabled(uint64_t category);
}  // namespace tracing_perfetto

#endif  // TRACING_PERFETTO_H
+61 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
#include "tracing_perfetto.h"

#include <cutils/trace.h>
#include <cstdarg>

#include "perfetto/public/te_category_macros.h"
#include "trace_categories.h"
@@ -39,6 +40,31 @@ void traceBegin(uint64_t category, const char* name) {
  }
}

void traceFormatBegin(uint64_t category, const char* fmt, ...) {
  struct PerfettoTeCategory* perfettoTeCategory =
      internal::toPerfettoCategory(category);
  const bool preferAtrace = internal::shouldPreferAtrace(perfettoTeCategory, category);
  const bool preferPerfetto = internal::isPerfettoCategoryEnabled(perfettoTeCategory);
  if (CC_LIKELY(!(preferAtrace || preferPerfetto))) {
    return;
  }

  const int BUFFER_SIZE = 256;
  va_list ap;
  char buf[BUFFER_SIZE];

  va_start(ap, fmt);
  vsnprintf(buf, BUFFER_SIZE, fmt, ap);
  va_end(ap);


  if (preferAtrace) {
    atrace_begin(category, buf);
  } else if (preferPerfetto) {
    internal::perfettoTraceBegin(*perfettoTeCategory, buf);
  }
}

void traceEnd(uint64_t category) {
  struct PerfettoTeCategory* perfettoTeCategory =
      internal::toPerfettoCategory(category);
@@ -107,6 +133,30 @@ void traceInstant(uint64_t category, const char* name) {
  }
}

void traceFormatInstant(uint64_t category, const char* fmt, ...) {
  struct PerfettoTeCategory* perfettoTeCategory =
      internal::toPerfettoCategory(category);
  const bool preferAtrace = internal::shouldPreferAtrace(perfettoTeCategory, category);
  const bool preferPerfetto = internal::isPerfettoCategoryEnabled(perfettoTeCategory);
  if (CC_LIKELY(!(preferAtrace || preferPerfetto))) {
    return;
  }

  const int BUFFER_SIZE = 256;
  va_list ap;
  char buf[BUFFER_SIZE];

  va_start(ap, fmt);
  vsnprintf(buf, BUFFER_SIZE, fmt, ap);
  va_end(ap);

  if (preferAtrace) {
    atrace_instant(category, buf);
  } else if (preferPerfetto) {
    internal::perfettoTraceInstant(*perfettoTeCategory, buf);
  }
}

void traceInstantForTrack(uint64_t category, const char* trackName,
                            const char* name) {
  struct PerfettoTeCategory* perfettoTeCategory =
@@ -130,10 +180,21 @@ void traceCounter(uint64_t category, const char* name, int64_t value) {
  }
}

void traceCounter32(uint64_t category, const char* name, int32_t value) {
  struct PerfettoTeCategory* perfettoTeCategory = internal::toPerfettoCategory(category);
  if (internal::shouldPreferAtrace(perfettoTeCategory, category)) {
    atrace_int(category, name, value);
  } else if (internal::isPerfettoCategoryEnabled(perfettoTeCategory)) {
    internal::perfettoTraceCounter(*perfettoTeCategory, name,
                                          static_cast<int64_t>(value));
  }
}

bool isTagEnabled(uint64_t category) {
  struct PerfettoTeCategory* perfettoTeCategory =
      internal::toPerfettoCategory(category);
  return internal::isPerfettoCategoryEnabled(perfettoTeCategory)
      || atrace_is_tag_enabled(category);
}

}  // namespace tracing_perfetto
+1 −0
Original line number Diff line number Diff line
@@ -729,6 +729,7 @@ void SurfaceFlinger::bootFinished() {
    mBootFinished = true;
    FlagManager::getMutableInstance().markBootCompleted();

    ::tracing_perfetto::registerWithPerfetto();
    mInitBootPropsFuture.wait();
    mRenderEnginePrimeCacheFuture.wait();

+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ cc_defaults {
        "libtimestats_atoms_proto",
        "libui",
        "libutils",
        "libtracing_perfetto",
    ],

    static_libs: [
+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ cc_binary {
        "libsurfaceflinger_mocks_defaults",
        "librenderengine_deps",
        "surfaceflinger_defaults",
        "libsurfaceflinger_common_deps",
    ],
    srcs: [
        ":libsurfaceflinger_sources",
Loading