/* * Tencent is pleased to support the open source community by making * Tencent GT (Version 2.4 and subsequent versions) available. * * Notwithstanding anything to the contrary herein, any previous version * of Tencent GT shall not be subject to the license hereunder. * All right, title, and interest, including all intellectual property rights, * in and to the previous version of Tencent GT (including any and all copies thereof) * shall be owned and retained by Tencent and subject to the license under the * Tencent GT End User License Agreement (http://gt.qq.com/wp-content/EULA_EN.html). * * Copyright (C) 2015 THL A29 Limited, a Tencent company. All rights reserved. * * Licensed under the MIT License (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at * * http://opensource.org/licenses/MIT * * 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 com.tencent.wstt.gt.engine; import java.util.ArrayList; import java.util.List; import java.util.Timer; import com.tencent.wstt.gt.OutPara; import com.tencent.wstt.gt.activity.GTIntervalSettingActivity; import com.tencent.wstt.gt.api.utils.CpuUtils; import com.tencent.wstt.gt.api.utils.Env; import com.tencent.wstt.gt.api.utils.FpsTimerTask; import com.tencent.wstt.gt.api.utils.MemUtils; import com.tencent.wstt.gt.api.utils.NetUtils; import com.tencent.wstt.gt.api.utils.SignalUtils; import com.tencent.wstt.gt.manager.Client; import com.tencent.wstt.gt.manager.ClientFactory; import com.tencent.wstt.gt.manager.ClientManager; import com.tencent.wstt.gt.manager.OpUIManager; import com.tencent.wstt.gt.manager.OpPerfBridge; import com.tencent.wstt.gt.manager.SingleInstanceClientFactory; import com.tencent.wstt.gt.utils.GTFrameUtils; public class DefaultParaRunEngine { private String[] gt_default_op_keys = { "MEM", "NET", "CPU", "Signal","FPS" }; private String[] gt_default_op_alias = { "MEM", "NET", "CPU", "SIG", "FPS" }; private List<OutPara> enable_default_ops; private Client client; private Thread thread; Timer fpsTimer40; private boolean fps_gather = false; private boolean hasCheckSu = false; public DefaultParaRunEngine() { enable_default_ops = new ArrayList<OutPara>(); ClientFactory cf = new SingleInstanceClientFactory(); int size = gt_default_op_keys.length; OutPara[] ops = new OutPara[size]; for (int i = 0; i < size; i++) { OutPara para = new OutPara(); para.setKey(gt_default_op_keys[i]); para.setAlias(gt_default_op_alias[i]); ops[i] = para; } client = cf.orderClient(ClientManager.DEFAULT_CLIENT, ClientManager.DEFAULT_CLIENT.hashCode(), ops, null); // 全局执行一次即可 OpUIManager.initDefaultOutputParamList(); } public void start() { Thread thread = new Thread(new EngineRunnable()); thread.start(); } public class EngineRunnable implements Runnable { @Override public void run() { while (true) { int len = getCurEnableDefaultOutParas().size(); if (0 != len) { for (OutPara op : enable_default_ops) { String value = refreshDefaultOutParasValue(op); op.setValue(value); } } else { } try { Thread.sleep(GTIntervalSettingActivity.msecond); } catch (InterruptedException e) { e.printStackTrace(); } } } } private List<OutPara> getCurEnableDefaultOutParas() { List<OutPara> ops = client.getAllOutParas(); enable_default_ops.clear(); for (OutPara op : ops) { if (OutPara.DISPLAY_DISABLE != op.getDisplayProperty()) { enable_default_ops.add(op); } } return enable_default_ops; } private String refreshDefaultOutParasValue(OutPara para) { if (null == para) { return ""; } String key = para.getKey(); String value = ""; if (OutPara.DISPLAY_DISABLE != para.getDisplayProperty() && key.equals(gt_default_op_keys[0])) { long[] memInfo = MemUtils.getMemInfo(); value = MemUtils.trans2FreeAndTotalMem(memInfo); long[] memInfo4UI = new long[2]; memInfo4UI[0] = (memInfo[1] + memInfo[2] + memInfo[3]); memInfo4UI[1] = memInfo[0]; OpPerfBridge.addHistory(para, value, memInfo4UI[0]); } else if (OutPara.DISPLAY_DISABLE != para.getDisplayProperty() && key.equals(gt_default_op_keys[1])) { // 实际使用时候发现,收发的数据分成两条曲线最合理 double lastT = NetUtils.getT_add_wifi() + NetUtils.getT_add_3G() + NetUtils.getT_add_2G(); double lastR = NetUtils.getR_add_wifi() + NetUtils.getR_add_3G() + NetUtils.getR_add_2G(); value = NetUtils.getNetValue(); double nowT = NetUtils.getT_add_wifi() + NetUtils.getT_add_3G() + NetUtils.getT_add_2G(); double nowR = NetUtils.getR_add_wifi() + NetUtils.getR_add_3G() + NetUtils.getR_add_2G(); value = NetUtils.getNetValue(); if (nowT != lastT || nowR != lastR) { OpPerfBridge.addHistory(para, value, new long[]{(long) nowT, (long) nowR}); } } else if (OutPara.DISPLAY_DISABLE != para.getDisplayProperty() && key.equals(gt_default_op_keys[2])) { value = CpuUtils.getCpuUsage() + "%"; long tempValue = Double .valueOf( (Double.valueOf(value.substring(0, value.length() - 1)) * 100)).longValue(); OpPerfBridge.addHistory(para, value, tempValue); } else if (OutPara.DISPLAY_DISABLE != para.getDisplayProperty() && key.equals(gt_default_op_keys[3])) { int wifiData = SignalUtils.getWifiStrength(); if (wifiData < -200) { wifiData = -200; } int netData = SignalUtils.getDBM(); value = netData + "dbm[" + SignalUtils.getNetType() + "]|" + wifiData + "dbm[WIFI]"; long[] datas = { netData, wifiData }; OpPerfBridge.addHistory(para, value, datas); } else if (key.equals(gt_default_op_keys[4])) { if (OutPara.DISPLAY_DISABLE != para.getDisplayProperty()) { if (! fps_gather) { runFps(); } value = para.getValue(); } else { // 这里想执行stop逻辑根本没机会,因为在这个方法之前监听的出参就洗牌了 // stopFps(); } } return value; } private synchronized void runFps() { if (Env.API >= 14) { fps_gather = true; if (! hasCheckSu) { thread = new Thread(new CheckSuRunnable(), "CheckSu"); thread.setDaemon(true); thread.start(); } // 因为这个Timer是延时执行,所以基本能赶上su判断线程出结果 fpsTimer40 = new Timer(); fpsTimer40.schedule(new FpsTimerTask(), 0, GTIntervalSettingActivity.msecond_FPS); } } class CheckSuRunnable implements Runnable { // 无su,线程挂住 @Override public void run() { hasCheckSu = true; GTFrameUtils.setPid(); } } // private synchronized void stopFps() { // if (Env.API >= 14) // { // fpsTimer40.cancel(); // FpsTimerTask.stopCurrentTask(); // } // // 老版本无法真正stop // } }