content: /*
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you 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.
   */
  package org.apache.weex.utils;
  
  import android.annotation.TargetApi;
  import android.os.Build;
  
  /**
   * Hepler class for systrace.
   *
   * Note that this will run only on JBMR2 or later.
   *
   * Trace will be enabled in debug production and be disabled in release
   * production, see build.gradle.
   * If you want to enable it in release, just set sEnabled to true.
   */
  public class Trace {
    private static final String TAG = "Weex_Trace";
    private abstract static class AbstractTrace {
      abstract void beginSection(String sectionName);
      abstract void endSection();
    }
  
    private static final AbstractTrace sTrace;
    private static final boolean sEnabled;
  
    // Pick the correct trace class to handle tracing.
    static {
      // If you want to enable it in release, just set sEnabled to true.
      // If you turn sEnabled on, weex would trace logs on Java side
      // as well as on V8 side, please take care of turning sEnabled on
      // to avoid performance impact.
      // FIXME: weex sdk may use another build files to build and cause
      // compiling errors if these build files don't contain any
      // ENABLE_TRACE, just comment out the line below.
      //sEnabled = com.taobao.weappplus_sdk.BuildConfig.ENABLE_TRACE;
      sEnabled = false;
  
      if (sEnabled == true && OsVersion.isAtLeastJB_MR2()) {
        sTrace = new TraceJBMR2();
      } else {
        sTrace = new TraceDummy();
      }
    }
  
    public static final boolean getTraceEnabled() {
      return sEnabled;
    }
  
    /**
     * Writes a trace message to indicate that a given section of code has begun.
     * This call must be followed by a corresponding call to {@link #endSection()}
     * on the same thread.
     *
     * <p class="note"> If sectionName contains '|', '\n' and '\0', these characters
     * will be repaced with a space character.
     *
     * @param sectionName The name of code section to appear in the trace.
     */
    public static void beginSection(String sectionName) {
      android.util.Log.i(TAG, "beginSection() " + sectionName);
      sTrace.beginSection(sectionName);
    }
  
    /**
     * Writes a trace message to indicate that a given section of code has ended.
     * This call must be preceeded by a corresponding call to {@link #beginSection(String)}
     * on the same thread.
     */
    public static void endSection() {
      sTrace.endSection();
      android.util.Log.i(TAG, "endSection()");
    }
  
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
    private static final class TraceJBMR2 extends AbstractTrace {
      @Override
      void beginSection(String sectionName) {
        android.os.Trace.beginSection(sectionName);
      }
  
      @Override
      void endSection() {
        android.os.Trace.endSection();
      }
    }
  
    private static final class TraceDummy extends AbstractTrace {
      @Override
      void beginSection(String sectionName) {
      }
  
      @Override
      void endSection() {
      }
    }
  }
  