/android/GT_APP/app/src/main/java/com/tencent/wstt/gt/analysis4/GTRDataToJsManager.java

https://github.com/Tencent/GT · Java · 286 lines · 201 code · 45 blank · 40 comment · 19 complexity · 7a3229f95b7c00131047d2a1984b35ba MD5 · raw file

  1. package com.tencent.wstt.gt.analysis4;
  2. import android.util.Log;
  3. import com.alibaba.fastjson.JSON;
  4. import com.tencent.wstt.gt.GTConfig;
  5. import com.tencent.wstt.gt.api.utils.Env;
  6. import com.tencent.wstt.gt.datatool.GTRAnalysis;
  7. import java.io.BufferedReader;
  8. import java.io.BufferedWriter;
  9. import java.io.File;
  10. import java.io.FileInputStream;
  11. import java.io.FileOutputStream;
  12. import java.io.FileWriter;
  13. import java.io.IOException;
  14. import java.io.InputStreamReader;
  15. import java.io.OutputStreamWriter;
  16. import java.util.ArrayList;
  17. /**
  18. * Created by p_guilfu on 2017/12/11.
  19. */
  20. public class GTRDataToJsManager {
  21. private static final int BUFFER_SIZE = 1 << 20;
  22. public static final String resultDataFilePath = Env.GTR_DATAJS_PATH_NAME;
  23. public static final String getResultDataFilePath = Env.GTR_WX_DATAJS_PATH_NAME;
  24. private static GTRAnalysis gtrAnalysis = null;
  25. private static boolean isWX = false;
  26. public static Boolean toAnalysis(String dataDirPath, boolean b) throws Exception {
  27. isWX = b;
  28. long startTime0 = System.currentTimeMillis();
  29. File dataDir = new File(dataDirPath);
  30. if (!dataDir.exists()) {
  31. throw new Exception("dataDirPath is not exists :" + dataDirPath);
  32. }
  33. File[] dataFiles = dataDir.listFiles();
  34. for (File temp : dataFiles) {
  35. if (temp.getName().endsWith(".txt")) {
  36. // 解析数据
  37. gtrAnalysis = getGTRAnalysis(temp.getAbsolutePath());
  38. long startTime = System.currentTimeMillis();
  39. Log.i("adam", " 序列化数据时间 =" + (startTime - startTime0) + "ms");
  40. }
  41. }
  42. long startTime1 = System.currentTimeMillis();
  43. // StringBuilder stringBuilder = new StringBuilder();
  44. // stringBuilder.append("\n\n\nvar appInfo = " + JSON.toJSONString(gtrAnalysis.getAppInfo()) + ";\n")
  45. // .append("var deviceInfo = " + JSON.toJSONString(gtrAnalysis.getDeviceInfo()) + ";\n")
  46. // .append("var frames = " + JSON.toJSONString(gtrAnalysis.getFrames()) + ";\n")
  47. // .append("var normalInfos = " + JSON.toJSONString(gtrAnalysis.getNormalInfos()) + ";\n")
  48. // .append("var gtrThreadInfos = " + JSON.toJSONString(gtrAnalysis.getGtrThreadInfos()) + ";\n")
  49. // .append("var frontBackStates = " + JSON.toJSONString(gtrAnalysis.getFrontBackStates()) + ";\n")
  50. // .append("var frontBackInfo = " + JSON.toJSONString(gtrAnalysis.getFrontBackInfo()) + ";\n")
  51. // .append("var lowSMInfos = " + JSON.toJSONString(gtrAnalysis.getLowSMInfos()) + ";\n")
  52. // .append("var allBlockInfos = " + JSON.toJSONString(gtrAnalysis.getAllBlockInfos()) + ";\n")
  53. // .append("var bigBlockIDs = " + JSON.toJSONString(gtrAnalysis.getBigBlockIDs()) + ";\n")
  54. // .append("var pageLoadInfos = " + JSON.toJSONString(gtrAnalysis.getPageLoadInfos()) + ";\n")
  55. // .append("var overActivityInfos = " + JSON.toJSONString(gtrAnalysis.getOverActivityInfos()) + ";\n")
  56. // .append("var overViewDraws = " + JSON.toJSONString(gtrAnalysis.getOverViewDraws()) + ";\n")
  57. // .append("var operationInfos = " + JSON.toJSONString(gtrAnalysis.getOperationInfos()) + ";\n")
  58. // .append("var viewBuildInfos = " + JSON.toJSONString(gtrAnalysis.getViewBuildInfos()) + ";\n")
  59. // .append("var overViewBuilds = " + JSON.toJSONString(gtrAnalysis.getOverViewBuilds()) + ";\n")
  60. // .append("var fragmentInfos = " + JSON.toJSONString(gtrAnalysis.getFragmentInfos()) + ";\n")
  61. // .append("var overFragments = " + JSON.toJSONString(gtrAnalysis.getOverFragments()) + ";\n")
  62. // .append("var allGCInfos = " + JSON.toJSONString(gtrAnalysis.getAllGCInfos()) + ";\n")
  63. // .append("var explicitGCs = " + JSON.toJSONString(gtrAnalysis.getExplicitGCs()) + ";\n")
  64. // .append("var diskIOInfos = " + JSON.toJSONString(gtrAnalysis.getDiskIOInfos()) + ";\n")
  65. // .append("var fileActionInfos = " + JSON.toJSONString(gtrAnalysis.getFileActionInfos()) + ";\n")
  66. // .append("var fileActionInfosInMainThread = " + JSON.toJSONString(gtrAnalysis.getFileActionInfosInMainThread()) + ";\n")
  67. // .append("var dbActionInfos = " + JSON.toJSONString(gtrAnalysis.getDbActionInfos()) + ";\n")
  68. // .append("var dbActionInfosInMainThread = " + JSON.toJSONString(gtrAnalysis.getDbActionInfosInMainThread()) + ";\n")
  69. // .append("var logInfos = " + JSON.toJSONString(gtrAnalysis.getLogInfos()) + ";\n")
  70. // .append("var flagInfo = " + JSON.toJSONString(gtrAnalysis.getFlagList()) + ";\n\n\n\n")
  71. // .append("//基础性能\nvar tableBaseData_base= frontBackInfo;\n//卡顿检测\nvar tableBaseData_lowSM = lowSMInfos;\nvar tableBaseData_bigBlock = bigBlockIDs;\n" +
  72. // "//页面测速\nvar tableBaseData_overActivity = overActivityInfos;\nvar tableBaseData_allPage = pageLoadInfos;\n" +
  73. // "//Fragment测速\nvar tableBaseData_overFragment = overFragments;\nvar tableBaseData_allFragment = fragmentInfos;\n" +
  74. // "//布局检测\nvar tableBaseData_overViewBuild = overViewBuilds;\nvar tableBaseData_overViewDraw = overViewDraws;\n" +
  75. // "//GC检测\nvar tableBaseData_explicitGC = explicitGCs;\n" +
  76. // "//IO检测\nvar tableBaseData_fileActionInMainThread = fileActionInfosInMainThread;\nvar tableBaseData_dbActionInMainThread = dbActionInfosInMainThread;\nvar tableBaseData_db = dbActionInfos;\n" +
  77. // "//关键日志\nvar tableBaseData_logcat = logInfos;\n");
  78. // appendDataJs(stringBuilder.toString());
  79. toDataJs();
  80. long startTime2 = System.currentTimeMillis();
  81. Log.i("adam", "写入数据时间 =" + (startTime2 - startTime1) + "ms");
  82. return true;
  83. }
  84. public static GTRAnalysis getGTRAnalysis(String dataFilePath) throws Exception {
  85. File file = new File(dataFilePath);
  86. if (!file.exists()) {
  87. throw new Exception("dataFilePath is not exists:" + dataFilePath);
  88. } else {
  89. GTRAnalysis gtrAnalysis = new GTRAnalysis();
  90. BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8"));
  91. for (String dataLine = bufferedReader.readLine(); dataLine != null; dataLine = bufferedReader.readLine()) {
  92. try {
  93. if (dataLine.length() > 0) {
  94. gtrAnalysis.distribute(dataLine.split(GTConfig.separator));
  95. }
  96. } catch (Exception e) {
  97. System.out.println("ErrorData:" + dataLine);
  98. e.printStackTrace();
  99. }
  100. }
  101. return gtrAnalysis;
  102. }
  103. }
  104. private static void appendDataJs(String data) {
  105. BufferedWriter bufferedWriter = null;
  106. try {
  107. File resultDataFile = new File(resultDataFilePath);
  108. if (isWX) {
  109. resultDataFile = new File(getResultDataFilePath);
  110. }
  111. if (resultDataFile.exists()) {
  112. resultDataFile.delete();
  113. }
  114. resultDataFile.getParentFile().mkdirs();
  115. resultDataFile.createNewFile();
  116. bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(resultDataFile, true), "utf-8"));
  117. bufferedWriter.write(data);
  118. } catch (IOException e) {
  119. e.printStackTrace();
  120. } finally {
  121. if (bufferedWriter != null) {
  122. try {
  123. bufferedWriter.flush();
  124. bufferedWriter.close();
  125. } catch (IOException e) {
  126. e.printStackTrace();
  127. }
  128. }
  129. }
  130. }
  131. private static void appendJSList(BufferedWriter writer, String varName, ArrayList list) throws IOException {
  132. appendVariableName(writer, varName);
  133. appendList(writer, list);
  134. writer.write(";\n");
  135. }
  136. private static void appendList(BufferedWriter writer, ArrayList list) throws IOException {
  137. writer.write("[");
  138. if (!list.isEmpty()) {
  139. writer.write(JSON.toJSONString(list.get(0)));
  140. for (int i = 1; i < list.size(); i++) {
  141. writer.write(",");
  142. writer.write(JSON.toJSONString(list.get(i)));
  143. }
  144. list.clear();
  145. }
  146. writer.write("]");
  147. }
  148. private static void appendJSObject(BufferedWriter writer, String varName, Object obj) throws IOException {
  149. appendVariableName(writer, varName);
  150. writer.write(JSON.toJSONString(obj));
  151. writer.write(";\n");
  152. }
  153. private static void appendRawString(BufferedWriter writer, String data) throws IOException {
  154. writer.write(data);
  155. writer.write(";\n");
  156. }
  157. private static void appendVariableName(BufferedWriter writer, String varName) throws IOException {
  158. writer.write("var ");
  159. writer.write(varName);
  160. writer.write("=");
  161. }
  162. private static void toDataJs(File des) {
  163. BufferedWriter writer = null;
  164. try {
  165. writer = new BufferedWriter(new FileWriter(des), BUFFER_SIZE);
  166. writer.write("\n\n\n");
  167. appendJSObject(writer, "appInfo", gtrAnalysis.getAppInfo());
  168. appendJSObject(writer, "deviceInfo", gtrAnalysis.getDeviceInfo());
  169. appendJSList(writer, "frames", gtrAnalysis.getFrames());
  170. appendJSList(writer, "normalInfos", gtrAnalysis.getNormalInfos());
  171. appendJSList(writer, "gtrThreadInfos", gtrAnalysis.getGtrThreadInfos());
  172. appendJSList(writer, "frontBackStates", gtrAnalysis.getFrontBackStates());
  173. appendJSObject(writer, "frontBackInfo", gtrAnalysis.getFrontBackInfo());
  174. appendJSList(writer, "lowSMInfos", gtrAnalysis.getLowSMInfos());
  175. appendJSList(writer, "allBlockInfos", gtrAnalysis.getAllBlockInfos());
  176. appendJSList(writer, "bigBlockIDs", gtrAnalysis.getBigBlockIDs());
  177. appendJSList(writer, "pageLoadInfos", gtrAnalysis.getPageLoadInfos());
  178. appendJSList(writer, "overActivityInfos", gtrAnalysis.getOverActivityInfos());
  179. appendJSList(writer, "overViewDraws", gtrAnalysis.getOverViewDraws());
  180. appendJSList(writer, "operationInfos", gtrAnalysis.getOperationInfos());
  181. appendJSList(writer, "viewBuildInfos", gtrAnalysis.getViewBuildInfos());
  182. appendJSList(writer, "overViewBuilds", gtrAnalysis.getOverViewBuilds());
  183. appendJSList(writer, "fragmentInfos", gtrAnalysis.getFragmentInfos());
  184. appendJSList(writer, "overFragments", gtrAnalysis.getOverFragments());
  185. appendJSList(writer, "allGCInfos", gtrAnalysis.getAllGCInfos());
  186. appendJSList(writer, "explicitGCs", gtrAnalysis.getExplicitGCs());
  187. appendJSList(writer, "diskIOInfos", gtrAnalysis.getDiskIOInfos());
  188. appendJSList(writer, "fileActionInfos", gtrAnalysis.getFileActionInfos());
  189. appendJSList(writer, "fileActionInfosInMainThread", gtrAnalysis.getFileActionInfosInMainThread());
  190. appendJSList(writer, "dbActionInfos", gtrAnalysis.getDbActionInfos());
  191. appendJSList(writer, "dbActionInfosInMainThread", gtrAnalysis.getDbActionInfosInMainThread());
  192. appendJSList(writer, "logInfos", gtrAnalysis.getLogInfos());
  193. appendJSList(writer, "flagInfo", gtrAnalysis.getFlagList());
  194. writer.write("\n\n\n");
  195. String data = "//基础性能\nvar tableBaseData_base= frontBackInfo;\n" +
  196. "//卡顿检测\nvar tableBaseData_lowSM = lowSMInfos;\n" +
  197. "var tableBaseData_bigBlock = bigBlockIDs;\n" +
  198. "//页面测速\nvar tableBaseData_overActivity = overActivityInfos;\nvar tableBaseData_allPage = pageLoadInfos;\n" +
  199. "//Fragment测速\nvar tableBaseData_overFragment = overFragments;\nvar tableBaseData_allFragment = fragmentInfos;\n" +
  200. "//布局检测\nvar tableBaseData_overViewBuild = overViewBuilds;\nvar tableBaseData_overViewDraw = overViewDraws;\n" +
  201. "//GC检测\nvar tableBaseData_explicitGC = explicitGCs;\n" +
  202. "//IO检测\nvar tableBaseData_fileActionInMainThread = fileActionInfosInMainThread;\n" +
  203. "var tableBaseData_dbActionInMainThread = dbActionInfosInMainThread;\nvar tableBaseData_db = dbActionInfos;\n" +
  204. "//关键日志\nvar tableBaseData_logcat = logInfos;\n";
  205. appendRawString(writer, data);
  206. writer.flush();
  207. } catch (IOException e) {
  208. e.printStackTrace();
  209. } finally {
  210. if (writer == null) {
  211. try {
  212. writer.close();
  213. } catch (IOException e) {
  214. e.printStackTrace();
  215. }
  216. }
  217. }
  218. }
  219. private static void toDataJs() {
  220. File des = isWX ? new File(getResultDataFilePath)
  221. : new File(resultDataFilePath);
  222. if (toCreateFileDir(des)) {
  223. toDataJs(des);
  224. } else {
  225. System.out.println("ErrorData: 文件创建失败,请开启系统读写权限后重试");
  226. }
  227. }
  228. private static boolean toCreateFileDir(File des) {
  229. try {
  230. if (des.exists()) {
  231. des.delete();
  232. }
  233. des.getParentFile().mkdirs();
  234. des.createNewFile();
  235. return true;
  236. } catch (IOException e) {
  237. e.printStackTrace();
  238. return false;
  239. }
  240. }
  241. }