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

Commit 2cea3828 authored by Zimuzo Ezeozue's avatar Zimuzo Ezeozue
Browse files

Remove string frees to support GetUTFRegion transition

Removed string free calls from tracing SDK now obsolete with
the move from GetUTFStringChars to GetUTFRegion in the JNI
string handling.

The higher level code (JNI) never owns memory unless it's
explicitly copied into a string for instance. This makes
memory management simpler and provides some performance
opportunities in the caller.

Test: atest PerfettoTest
Bug: 303199244
Flag: android.os.perfetto_sdk_tracing_v2
Change-Id: I495cd593f04e7444527b567bc7efddfe0cd92f71
parent ae03cf1f
Loading
Loading
Loading
Loading
+0 −30
Original line number Diff line number Diff line
@@ -292,13 +292,8 @@ class DebugArg {
    arg_ = std::move(arg);
  }

  ~DebugArg() {
    free_string_value();
  }

  void set_value(T value) {
    if constexpr (std::is_same_v<T, const char*>) {
      free_string_value();
      arg_.value = value;
    } else if constexpr (std::is_same_v<T, int64_t>) {
      arg_.value = value;
@@ -321,16 +316,6 @@ class DebugArg {
  DISALLOW_COPY_AND_ASSIGN(DebugArg);
  TypeMap::type arg_;
  const std::string name_;

  constexpr void free_string_value() {
    if constexpr (std::is_same_v<typename TypeMap::type,
                                 PerfettoTeHlExtraDebugArgString>) {
      if (arg_.value) {
        free((void*)arg_.value);
        arg_.value = nullptr;
      }
    }
  }
};

template <typename T>
@@ -375,10 +360,6 @@ class ProtoField {
    arg_ = std::move(arg);
  }

  ~ProtoField() {
    free_string_value();
  }

  void set_value(uint32_t id, T value) {
    if constexpr (std::is_same_v<T, int64_t>) {
      arg_.header.id = id;
@@ -387,7 +368,6 @@ class ProtoField {
      arg_.header.id = id;
      arg_.value = value;
    } else if constexpr (std::is_same_v<T, const char*>) {
      free_string_value();
      arg_.header.id = id;
      arg_.str = value;
    }
@@ -404,16 +384,6 @@ class ProtoField {
 private:
  DISALLOW_COPY_AND_ASSIGN(ProtoField);
  TypeMap::type arg_;

  constexpr void free_string_value() {
    if constexpr (std::is_same_v<typename TypeMap::type,
                                 PerfettoTeHlProtoFieldCstr>) {
      if (arg_.str) {
        free((void*)arg_.str);
        arg_.str = nullptr;
      }
    }
  }
};

class ProtoFieldNested {