Пример #1
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);
    }
  }
Пример #2
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);
        }
      }
    }
  }
Пример #3
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;
  }