Пример #1
0
 public static void clearAllEnableGWData() {
   TagTimeEntry[] ttes = OpPerfBridge.getAllEnableProfilerData();
   for (TagTimeEntry tte : ttes) {
     tte.clear();
     // 如果是流量数据,还要同时reset
     String key = tte.getName();
     NetUtils.clearNetValue(key);
   }
 }
Пример #2
0
 public static void saveAllEnableGWData(GWSaveEntry saveEntry) {
   setLastSaveFolder(saveEntry.path3);
   String now = GTUtils.getSaveDate();
   saveEntry.setNow(now);
   TagTimeEntry[] ttes = OpPerfBridge.getAllEnableProfilerData();
   for (TagTimeEntry tte : ttes) {
     if (null != tte && tte.getAlias().equals("SM")) {
       LogUtils.writeGWDataForSM(saveEntry, tte);
     } else {
       LogUtils.writeGWData(saveEntry, tte);
     }
   }
   LogUtils.writeGWDesc(saveEntry, ttes);
 }
Пример #3
0
  public void clearAllCache() {
    if (started) {
      return;
    }

    startedOnceUntilNotClear = false;

    if (null != groupMap) {
      for (GroupTimeEntry gte : groupMap.values()) {
        for (TagTimeEntry tte : gte.entrys()) {
          tte.clear();
        }
        gte.clear();
      }
      groupMap.clear();
    }
  }
Пример #4
0
  public void setState(boolean flag) {
    started = flag;
    if (flag) {
      startedOnceUntilNotClear = true;
    }

    //		GTPref.getGTPref().edit().putBoolean(GTPref.PERF_MASTER_SWITCH, started).commit();
    if (!started) {
      for (GroupTimeEntry gte : groupMap.values()) {
        for (TagTimeEntry tte : gte.entrys()) {
          /*
           * 后面处理注意,这个操作之后如果TagTimeEntry对象收到对应的
           * 一条endTime消息,则是上次消费的,需要丢弃,
           * 即在lastStart==0时,只有收到startTime消息才是开始有效的。
           * 同一个线程内,不需要担心乱序、多条的问题
           */
          tte.setLastStart(0);
        }
      }
    }
  }
Пример #5
0
  /** 规定不区分线程的tid为0,被测程序的线程号为正数,GT控制台的线程号为负数 */
  public void startTime(long tid, String group, String tag, int exKey, long start, int funcId) {
    if (null != group && null != tag) {
      GroupTimeEntry groupEntry = groupMap.get(group);

      if (null == groupEntry) {
        groupEntry = new GroupTimeEntry(group);
        lock.lock();
        groupMap.put(group, groupEntry);
        lock.unlock();
      }

      // 从Group中取出由tag, tid, exKey共同标示的TagTimeEntry对象
      TagTimeEntry tagEntry = groupEntry.getThreadEntry(tag, tid, exKey);

      if (null == tagEntry) {
        tagEntry = new TagTimeEntry(groupEntry);
        tagEntry.setName(tag);
        tagEntry.setTid(tid);
        tagEntry.setExkey(exKey);
        /*
         * funcId用的是PERF_START_TIME_GLOBAL或PERF_START_DIGITAL_GLOBAL
         * 对于后面的使用只是保证UI精度,不会做其他依赖funcId的逻辑计算
         */
        tagEntry.setFunctionId(funcId);
        groupEntry.addEntry(tagEntry);
      }

      tagEntry.setLastStart(start);
    }
  }
Пример #6
0
  /** 记录单点的性能数据(start和end这种成对的称为双点性能数据),也按tid区分全局的还是线程的 */
  public void recordDigital(long tid, String group, String tag, long[] datas, int funcId) {
    if (!started) {
      return;
    }

    if (null != group && null != tag) {
      GroupTimeEntry groupEntry = groupMap.get(group);

      if (null == groupEntry) {
        groupEntry = new GroupTimeEntry(group);
        lock.lock();
        groupMap.put(group, groupEntry);
        lock.unlock();
      }

      // 从Group中取出由tag, tid共同标示的统计对象(exKey无用)
      TagTimeEntry staticsTagTimeEntry = groupEntry.getStaticsEntry(tag, tid);

      if (null == staticsTagTimeEntry) {
        staticsTagTimeEntry = new TagTimeEntry(groupEntry);
        staticsTagTimeEntry.setName(tag);
        staticsTagTimeEntry.setTid(tid);
        staticsTagTimeEntry.setFunctionId(funcId);
        staticsTagTimeEntry.initChildren(datas.length - 1);
        groupEntry.addStaticsEntry(staticsTagTimeEntry);
      }

      if (Functions.PERF_DIGITAL_MULT == funcId || Functions.PERF_DIGITAL_MULT_MEM == funcId) {
        TagTimeEntry[] subEntrys = staticsTagTimeEntry.getSubTagEntrys();
        for (int i = 0; i < subEntrys.length; i++) {
          TagTimeEntry subEntry = subEntrys[i];
          subEntry.add(datas[i]);
        }
        staticsTagTimeEntry.add(datas[0]); // TODO 得记录一个维度的值,否则外面UI无法展示
      } else {
        staticsTagTimeEntry.add(datas[0]);
      }
    }
  }
Пример #7
0
  public long endTime(long tid, String group, String tag, int exKey, long end, int funcId) {
    if (null != group && null != tag) {
      GroupTimeEntry groupEntry = null;
      TagTimeEntry tagEntry = null;

      if (null == groupMap.get(group)) {
        return -1;
      }

      groupEntry = groupMap.get(group);
      if (null == groupEntry) {
        return -1;
      }

      tagEntry = groupEntry.getThreadEntry(tag, tid, exKey);
      if (null == tagEntry) {
        return -1;
      }

      if (tagEntry.getLastStart() <= 0) {
        return -1;
      }

      long reduce = end - tagEntry.getLastStart();
      tagEntry.setLastStart(0);

      if (started) {
        // 在对应的统计对象中加入差值,注意统计值是不关注exKey的
        TagTimeEntry staticsTagTimeEntry = groupEntry.getStaticsEntry(tag, tid);
        staticsTagTimeEntry.add(reduce);
      }

      return reduce;
    }

    return -1;
  }