未验证 提交 26a6b1d7 编写于 作者: L LinJZong 提交者: GitHub

Merge pull request #207 from rex26/master

[bug fix] #141 希望能加一个按照页面进行分类的最高值,最低值、平局值这些数据
......@@ -19,6 +19,7 @@ import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.config.PerformanceInfoConfig;
import com.didichuxing.doraemonkit.kit.custom.PerformanceInfo;
import com.didichuxing.doraemonkit.kit.custom.UploadMonitorInfoBean;
import com.didichuxing.doraemonkit.kit.network.NetworkManager;
import com.didichuxing.doraemonkit.util.FileManager;
import com.didichuxing.doraemonkit.util.JsonUtil;
import com.didichuxing.doraemonkit.util.LogHelper;
......@@ -227,7 +228,7 @@ public class PerformanceDataManager {
startMonitorMemoryInfo();
}
if (PerformanceInfoConfig.isTrafficOpen(mContext)) {
// TODO: 2019/3/22 开始流量监控
NetworkManager.get().startMonitor();
}
mHandler.sendEmptyMessageDelayed(MSG_SAVE_LOCAL, NORMAL_FRAME_RATE * 1000);
}
......@@ -239,7 +240,7 @@ public class PerformanceDataManager {
stopMonitorFrameInfo();
stopMonitorCPUInfo();
stopMonitorMemoryInfo();
// TODO: 2019/3/22 结束流量监控
NetworkManager.get().stopMonitor();
}
public boolean isUploading(){
......@@ -433,6 +434,9 @@ public class PerformanceDataManager {
return filePath + fpsFileName;
}
public String getCustomFilePath() {
return filePath + customFileName;
}
public long getLastFrameRate() {
return mLastFrameRate;
}
......
......@@ -11,8 +11,13 @@ import android.widget.TextView;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.config.PerformanceInfoConfig;
import com.didichuxing.doraemonkit.constant.PageTag;
import com.didichuxing.doraemonkit.kit.colorpick.ColorPickerInfoFloatPage;
import com.didichuxing.doraemonkit.kit.common.PerformanceDataManager;
import com.didichuxing.doraemonkit.ui.KitFloatPage;
import com.didichuxing.doraemonkit.ui.base.BaseFragment;
import com.didichuxing.doraemonkit.ui.base.FloatPageManager;
import com.didichuxing.doraemonkit.ui.base.PageIntent;
import com.didichuxing.doraemonkit.ui.realtime.OnFloatPageChangeListener;
import com.didichuxing.doraemonkit.ui.realtime.RealTimeChartIconPage;
import com.didichuxing.doraemonkit.ui.realtime.RealTimeChartPage;
......@@ -56,6 +61,7 @@ public class MonitorDataUploadFragment extends BaseFragment implements OnFloatPa
mSettingItemAdapter.append(new SettingItem(R.string.dk_frameinfo_cpu, PerformanceInfoConfig.isCPUOpen(getContext())));
mSettingItemAdapter.append(new SettingItem(R.string.dk_frameinfo_ram, PerformanceInfoConfig.isMemoryOpen(getContext())));
mSettingItemAdapter.append(new SettingItem(R.string.dk_kit_net_monitor, PerformanceInfoConfig.isTrafficOpen(getContext())));
mSettingItemAdapter.append(new SettingItem(R.string.dk_platform_monitor_view_stat_data, R.drawable.dk_more_icon));
mSettingItemAdapter.setOnSettingItemSwitchListener(new SettingItemAdapter.OnSettingItemSwitchListener() {
@Override
......@@ -72,6 +78,14 @@ public class MonitorDataUploadFragment extends BaseFragment implements OnFloatPa
setCommitButtonState();
}
});
mSettingItemAdapter.setOnSettingItemClickListener(new SettingItemAdapter.OnSettingItemClickListener() {
@Override
public void onSettingItemClick(View view, SettingItem data) {
if (data.desc == R.string.dk_platform_monitor_view_stat_data) {
showContent(PageDataFragment.class);
}
}
});
mSettingList.setAdapter(mSettingItemAdapter);
mCommitButton.setOnClickListener(new View.OnClickListener() {
@Override
......@@ -79,9 +93,13 @@ public class MonitorDataUploadFragment extends BaseFragment implements OnFloatPa
if (mCommitButton.getText().equals(getString(R.string.dk_platform_monitor_data_button_stop))) {
mCommitButton.setText(R.string.dk_platform_monitor_data_button);
PerformanceDataManager.getInstance().stopUploadMonitorData();
FloatPageManager.getInstance().removeAll(RealTimePerformDataFloatPage.class);
} else {
mCommitButton.setText(R.string.dk_platform_monitor_data_button_stop);
PerformanceDataManager.getInstance().startUploadMonitorData();
PageIntent pageIntent = new PageIntent(RealTimePerformDataFloatPage.class);
pageIntent.mode = PageIntent.MODE_SINGLE_INSTANCE;
FloatPageManager.getInstance().add(pageIntent);
}
}
});
......
package com.didichuxing.doraemonkit.kit.custom;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.kit.common.PerformanceDataManager;
import com.didichuxing.doraemonkit.ui.base.BaseFragment;
import com.didichuxing.doraemonkit.ui.fileexplorer.FileInfo;
import com.didichuxing.doraemonkit.ui.widget.recyclerview.DividerItemDecoration;
import com.didichuxing.doraemonkit.ui.widget.titlebar.HomeTitleBar;
import com.didichuxing.doraemonkit.ui.widget.titlebar.TitleBar;
import com.didichuxing.doraemonkit.util.JsonUtil;
import com.google.gson.reflect.TypeToken;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class PageDataFragment extends BaseFragment {
private RecyclerView mRvList;
private PageDataItemAdapter mAdapter;
@Override
protected int onRequestLayout() {
return R.layout.dk_fragment_monitor_pagedata;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initView();
initData();
}
private void initView() {
TitleBar titleBar = findViewById(R.id.title_bar);
titleBar.setOnTitleBarClickListener(new TitleBar.OnTitleBarClickListener() {
@Override
public void onLeftClick() {
getActivity().onBackPressed();
}
@Override
public void onRightClick() {
}
});
mRvList = findViewById(R.id.info_list);
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
mRvList.setLayoutManager(layoutManager);
mAdapter = new PageDataItemAdapter(getContext());
mRvList.setAdapter(mAdapter);
DividerItemDecoration decoration = new DividerItemDecoration(DividerItemDecoration.VERTICAL);
decoration.setDrawable(getResources().getDrawable(R.drawable.dk_divider_gray));
mRvList.addItemDecoration(decoration);
mRvList.setAdapter(mAdapter);
}
private void initData() {
new LoadDataTask().execute(PerformanceDataManager.getInstance().getCustomFilePath());
}
private class LoadDataTask extends AsyncTask<String, Integer, List<PageDataItem>> {
@Override
protected void onPostExecute(List<PageDataItem> items) {
mAdapter.setData(items);
}
@Override
protected List<PageDataItem> doInBackground(String... strings) {
File file = new File(strings[0]);
String fileString = getFileString(file);
fileString = '['+fileString+']';
fileString = fileString.replaceAll("\\}\\{","},{");
List<UploadMonitorInfoBean> infoBeans = JsonUtil.jsonToList(fileString, UploadMonitorInfoBean.class);
return convert2ItemData(infoBeans);
}
}
private List<PageDataItem> convert2ItemData(List<UploadMonitorInfoBean> infoBeans) {
List<PageDataItem> dataItems = new ArrayList<>();
if(null == infoBeans || 0 >= infoBeans.size()){
return dataItems;
}
for (UploadMonitorInfoBean infoBean : infoBeans) {
if(null == infoBean || null == infoBean.performanceArray || 0 >= infoBean.performanceArray.size()){
continue;
}
PageDataItem item = new PageDataItem();
List<PerformanceInfo> performanceInfos = infoBean.performanceArray;
item.pageName = infoBean.appName;
item.upNetWork =new PageDataItemChild<>(R.string.dk_frameinfo_upstream);
item.downNetWork = new PageDataItemChild<>(R.string.dk_frameinfo_downstream);
item.memory = new PageDataItemChild<>(R.string.dk_frameinfo_ram);
item.cpu = new PageDataItemChild<>(R.string.dk_frameinfo_cpu);
item.fps = new PageDataItemChild<>(R.string.dk_frameinfo_fps);
for (PerformanceInfo info : performanceInfos) {
setValue(item.memory,info.memory);
setValue(item.cpu,info.cpu);
setValue(item.fps,info.fps);
}
item.memory.avg /= performanceInfos.size();
item.cpu.avg /= performanceInfos.size();
item.fps.avg /= performanceInfos.size();
dataItems.add(item);
}
return dataItems;
}
private void setValue(PageDataItemChild<Float> child, float newValue) {
child.min = Math.min(null == child.min ? 0:child.min, newValue);
child.max = Math.max(null == child.max ? 0:child.max, newValue);
child.avg = (null == child.avg ? 0:child.avg)+newValue;
}
private void setValue(PageDataItemChild<Integer> child, int newValue) {
child.min = Math.min(null == child.min ? 0:child.min, newValue);
child.max = Math.max(null == child.max ? 0:child.max, newValue);
child.avg = (null == child.avg ? 0:child.avg)+newValue;
}
private void setValue(PageDataItemChild<Double> child, double newValue) {
child.min = Math.min(null == child.min ? 0:child.min, newValue);
child.max = Math.max(null == child.max ? 0:child.max, newValue);
child.avg = (null == child.avg ? 0:child.avg)+newValue;
}
private String getFileString(File file) {
StringBuilder stringBuilder = new StringBuilder();
if (file.exists()) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
while ((tempString = reader.readLine()) != null) {
stringBuilder.append(tempString);
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
return stringBuilder.toString();
}
}
package com.didichuxing.doraemonkit.kit.custom;
import android.support.annotation.StringRes;
import android.view.View;
public class PageDataItem {
public String pageName;
public PageDataItemChild<Double> upNetWork;
public PageDataItemChild<Double> downNetWork;
public PageDataItemChild<Float> memory;
public PageDataItemChild<Float> cpu;
public PageDataItemChild<Integer> fps;
public PageDataItem() {
}
}
class PageDataItemChild<T extends Number> {
@StringRes
public int nameResId;
public T min;
public T max;
public T avg;
public PageDataItemChild(int nameResId) {
this.nameResId = nameResId;
}
public int getVisibility(PageDataItemChild<? extends Number> child){
return 0 < getValue(child.min)+ getValue(child.max) + getValue(child.avg)
? View.VISIBLE: View.GONE;
}
private double getValue(Number data){
return null == data? 0: data.doubleValue();
}
public int getNameResId() {
return nameResId;
}
public void setNameResId(int nameResId) {
this.nameResId = nameResId;
}
public void setMin(T min) {
this.min = min;
}
public T getMax() {
return max;
}
public void setMax(T max) {
this.max = max;
}
public T getAvg() {
return avg;
}
public void setAvg(T avg) {
this.avg = avg;
}
}
package com.didichuxing.doraemonkit.kit.custom;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.ui.widget.recyclerview.AbsRecyclerAdapter;
import com.didichuxing.doraemonkit.ui.widget.recyclerview.AbsViewBinder;
public class PageDataItemAdapter extends AbsRecyclerAdapter<AbsViewBinder<PageDataItem>, PageDataItem> {
private Context mContext;
public PageDataItemAdapter(Context context) {
super(context);
mContext = context;
}
@Override
protected AbsViewBinder<PageDataItem> createViewHolder(View view, int viewType) {
return new ViewHolder(view);
}
@Override
protected View createView(LayoutInflater inflater, ViewGroup parent, int viewType) {
return inflater.inflate(R.layout.dk_fragment_monitor_pagedata_item, parent, false);
}
public class ViewHolder extends AbsViewBinder<PageDataItem> {
private TextView page_name_txt;
private View up_network_item;
private View down_network_item;
private View memory_item;
private View cpu_item;
private View fps_item;
public ViewHolder(View view) {
super(view);
}
@Override
protected void getViews() {
page_name_txt = getView(R.id.page_name_txt);
up_network_item = getView(R.id.up_network_item);
down_network_item = getView(R.id.down_network_item);
memory_item = getView(R.id.memory_item);
cpu_item = getView(R.id.cpu_item);
fps_item = getView(R.id.fps_item);
}
@Override
public void bind(PageDataItem item) {
page_name_txt.setText(item.pageName);
setValue(up_network_item, item.upNetWork);
setValue(down_network_item, item.downNetWork);
setValue(memory_item, item.memory);
setValue(cpu_item, item.cpu);
setValue(fps_item, item.fps);
}
}
private void setValue(View iteView, PageDataItemChild<? extends Number> data) {
int visibility = data.getVisibility(data);
iteView.setVisibility(visibility);
if(View.GONE == visibility){
return;
}
String rule = getFormatRule(data.nameResId);
((TextView)iteView.findViewById(R.id.data_name_txt)).setText(data.nameResId);
((TextView)iteView.findViewById(R.id.high_data_txt)).setText(String.format(rule, data.max));
((TextView)iteView.findViewById(R.id.low_data_txt)).setText(String.format(rule, data.min));
((TextView)iteView.findViewById(R.id.avg_data_txt)).setText(String.format("%s - "+rule, mContext.getString(R.string.dk_frameinfo_avg_value), data.avg));
}
private String getFormatRule(int nameResId){
String formatRule = "";
if (nameResId == R.string.dk_frameinfo_ram) {
formatRule = "%.1fM";
} else if (nameResId == R.string.dk_frameinfo_cpu) {
formatRule = "%.1f%%";
} else if (nameResId == R.string.dk_frameinfo_fps) {
formatRule = "%s";
} else if (nameResId == R.string.dk_frameinfo_downstream) {
formatRule = "%.1fB";
} else if (nameResId == R.string.dk_frameinfo_upstream) {
formatRule = "%.1fB";
}
return formatRule;
}
}
package com.didichuxing.doraemonkit.kit.custom;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.TextView;
import com.didichuxing.doraemonkit.R;
import com.didichuxing.doraemonkit.config.PerformanceInfoConfig;
import com.didichuxing.doraemonkit.kit.common.PerformanceDataManager;
import com.didichuxing.doraemonkit.kit.network.NetworkManager;
import com.didichuxing.doraemonkit.kit.network.bean.NetworkRecord;
import com.didichuxing.doraemonkit.kit.timecounter.TimeCounterManager;
import com.didichuxing.doraemonkit.ui.base.BaseFloatPage;
import com.didichuxing.doraemonkit.ui.base.TouchProxy;
import com.didichuxing.doraemonkit.util.UIUtils;
import java.util.List;
/**
*
*/
public class RealTimePerformDataFloatPage extends BaseFloatPage implements TouchProxy.OnTouchEventListener {
public static final int UPDATE_DATA_WHAT = 0x123;
private WindowManager mWindowManager;
private TouchProxy mTouchProxy = new TouchProxy(this);
TextView mMemoryTxt;
TextView mDownNetworkTxt;
TextView mCpuTxt;
TextView mUpNetworkTxt;
TextView mFpsTxt;
private Handler mHandler;
@Override
protected void onCreate(Context context) {
super.onCreate(context);
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
mHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
showInfo();
mHandler.sendEmptyMessageDelayed(UPDATE_DATA_WHAT, 1000);
}
};
}
@Override
protected View onCreateView(Context context, ViewGroup view) {
return LayoutInflater.from(context).inflate(R.layout.dk_float_perform_data, null);
}
@Override
protected void onLayoutParamsCreated(WindowManager.LayoutParams params) {
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.x = UIUtils.dp2px(getContext(), 30);
params.y = UIUtils.dp2px(getContext(), 30);
}
@Override
protected void onViewCreated(View view) {
super.onViewCreated(view);
initView();
}
private void initView() {
getRootView().setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return mTouchProxy.onTouchEvent(v, event);
}
});
mMemoryTxt = findViewById(R.id.memory_txt);
mDownNetworkTxt = findViewById(R.id.down_network_txt);
mCpuTxt = findViewById(R.id.cpu_txt);
mUpNetworkTxt = findViewById(R.id.up_network_txt);
mFpsTxt = findViewById(R.id.fps_txt);
mHandler.sendEmptyMessage(UPDATE_DATA_WHAT);
}
@SuppressLint("DefaultLocale")
private void showInfo() {
PerformanceDataManager manager = PerformanceDataManager.getInstance();
if (PerformanceInfoConfig.isMemoryOpen(getContext())) {
mMemoryTxt.setVisibility(View.VISIBLE);
mMemoryTxt.setText(String.format("%s: %.1fM", getString(R.string.dk_frameinfo_ram), manager.getLastMemoryInfo()));
}else{
mMemoryTxt.setVisibility(View.INVISIBLE);
}
if (PerformanceInfoConfig.isCPUOpen(getContext())) {
mCpuTxt.setVisibility(View.VISIBLE);
mCpuTxt.setText(String.format("%s: %.1f%%", getString(R.string.dk_frameinfo_cpu), manager.getLastCpuRate()));
}else{
mCpuTxt.setVisibility(View.INVISIBLE);
}
if (PerformanceInfoConfig.isFPSOpen(getContext())) {
mFpsTxt.setVisibility(View.VISIBLE);
mFpsTxt.setText(String.format("%s: %s", getString(R.string.dk_frameinfo_fps), manager.getLastFrameRate() + ""));
}else{
mFpsTxt.setVisibility(View.INVISIBLE);
}
if (PerformanceInfoConfig.isTrafficOpen(getContext())) {
mDownNetworkTxt.setVisibility(View.VISIBLE);
mUpNetworkTxt.setVisibility(View.VISIBLE);
List<NetworkRecord> records = NetworkManager.get().getRecords();
long requestLength = null != records && 0 < records.size() ? records.get(records.size() - 1).requestLength : 0;
long responseLength = null != records && 0 < records.size() ? records.get(records.size() - 1).responseLength : 0;
mDownNetworkTxt.setText(String.format("%s: %sB", getString(R.string.dk_frameinfo_downstream), requestLength));
mUpNetworkTxt.setText(String.format("%s: %sB", getString(R.string.dk_frameinfo_upstream), responseLength));
}else{
mDownNetworkTxt.setVisibility(View.INVISIBLE);
mUpNetworkTxt.setVisibility(View.INVISIBLE);
}
}
@Override
public void onMove(int x, int y, int dx, int dy) {
getLayoutParams().x += dx;
getLayoutParams().y += dy;
mWindowManager.updateViewLayout(getRootView(), getLayoutParams());
}
@Override
public void onUp(int x, int y) {
}
@Override
public void onDown(int x, int y) {
}
@Override
public void onEnterForeground() {
super.onEnterForeground();
getRootView().setVisibility(View.VISIBLE);
}
@Override
public void onEnterBackground() {
super.onEnterBackground();
getRootView().setVisibility(View.GONE);
TimeCounterManager.get().onEnterBackground();
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size android:height="12dp" />
<solid android:color="#F5F6F7"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#aa000000" />
<corners android:radius="4dp" />
<stroke android:color="@color/dk_color_CCCCCC" android:width="1px" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="200dp"
android:layout_height="100dp"
android:background="@drawable/dk_perform_data_background"
android:orientation="vertical"
android:padding="10dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/memory_txt"
android:textColor="#FFF"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="@dimen/dk_font_size_12" />
<TextView
android:id="@+id/down_network_txt"
android:textColor="#FFF"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="@dimen/dk_font_size_12" />
</LinearLayout>
<LinearLayout
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/cpu_txt"
android:textColor="#FFF"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="@dimen/dk_font_size_12" />
<TextView
android:id="@+id/up_network_txt"
android:textColor="#FFF"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="@dimen/dk_font_size_12" />
</LinearLayout>
<TextView
android:id="@+id/fps_txt"
android:textColor="#FFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/dk_font_size_12" />
</LinearLayout>
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="right|bottom"
android:layout_marginTop="-20dp"
android:src="@drawable/dk_float_button" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:background="@color/dk_color_FFFFFF">
<com.didichuxing.doraemonkit.ui.widget.titlebar.TitleBar
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="44dp"
app:dkLeftIcon="@drawable/dk_title_back"
app:dkLeftText="@string/dk_back"
app:dkTitle="@string/dk_platform_monitor_page_data" />
<View
style="@style/DK.Shadow.Bottom" />
<android.support.v7.widget.RecyclerView
android:id="@+id/info_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:overScrollMode="never"
android:scrollbars="none" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/dk_color_FFFFFF"
android:padding="10dp"
android:orientation="vertical">
<TextView
android:id="@+id/page_name_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp"
android:textColor="#333"
android:maxLines="1"
android:ellipsize="end"
android:layout_marginBottom="16dp"
android:text="" />
<include
android:id="@+id/up_network_item"
android:layout_marginBottom="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/dk_fragment_monitor_pagedata_item_item"
/>
<include
android:id="@+id/down_network_item"
android:layout_marginBottom="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/dk_fragment_monitor_pagedata_item_item" />
<include
android:id="@+id/memory_item"
android:layout_marginBottom="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/dk_fragment_monitor_pagedata_item_item" />
<include
android:id="@+id/cpu_item"
android:layout_marginBottom="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/dk_fragment_monitor_pagedata_item_item" />
<include
android:id="@+id/fps_item"
android:layout_marginBottom="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/dk_fragment_monitor_pagedata_item_item" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/data_name_txt"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="right"
android:paddingRight="10dp"
android:textSize="12sp"
android:textColor="#333"
android:layout_weight="1"
android:text="" />
<TextView
android:id="@+id/high_data_txt"
android:drawableLeft="@drawable/dk_performance_up_arrow"
android:drawablePadding="4dp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="12sp"
android:textColor="#666"
android:text="" />
<TextView
android:id="@+id/low_data_txt"
android:drawableLeft="@drawable/dk_performance_down_arrow"
android:drawablePadding="4dp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="12sp"
android:textColor="#666"
android:text="" />
<TextView
android:id="@+id/avg_data_txt"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="12sp"
android:textColor="#666"
android:text="" />
</LinearLayout>
\ No newline at end of file
......@@ -52,6 +52,9 @@
<string name="dk_frameinfo_fps">FPS</string>
<string name="dk_frameinfo_cpu">CPU</string>
<string name="dk_frameinfo_custom">CUSTOM</string>
<string name="dk_frameinfo_upstream">Upstream traffic</string>
<string name="dk_frameinfo_downstream">Downstream traffic</string>
<string name="dk_frameinfo_avg_value">Average value</string>
<string name="dk_log_info_edt_hint">Enter the keywords you want to filter</string>
<string name="dk_log_info_verbose">Verbose</string>
......@@ -167,6 +170,8 @@
<string name="dk_platform_monitor_data_button">start test</string>
<string name="dk_platform_monitor_data_button_stop">stop test</string>
<string name="dk_platform_monitor_view_stat_data">view statistics</string>
<string name="dk_platform_monitor_page_data">page data</string>
<string name="dk_log_text_loading">Loading...</string>
</resources>
......@@ -53,6 +53,9 @@
<string name="dk_frameinfo_fps">帧率</string>
<string name="dk_frameinfo_cpu">CPU</string>
<string name="dk_frameinfo_custom">自定义</string>
<string name="dk_frameinfo_upstream">上行流量</string>
<string name="dk_frameinfo_downstream">下行流量</string>
<string name="dk_frameinfo_avg_value">平均值</string>
<string name="dk_log_info_edt_hint">输入想要过滤的关键字</string>
<string name="dk_log_info_verbose">Verbose</string>
......@@ -166,5 +169,7 @@
<string name="dk_platform_monitor_data_button">开始测试</string>
<string name="dk_platform_monitor_data_button_stop">结束测试</string>
<string name="dk_platform_monitor_view_stat_data">查看统计数据</string>
<string name="dk_platform_monitor_page_data">页面数据</string>
<string name="dk_log_text_loading">日志加载中...</string>
</resources>
......@@ -56,6 +56,9 @@
<string name="dk_frameinfo_cpu">CPU</string>
<string name="dk_frameinfo_ram">内存</string>
<string name="dk_frameinfo_custom">自定义</string>
<string name="dk_frameinfo_upstream">上行流量</string>
<string name="dk_frameinfo_downstream">下行流量</string>
<string name="dk_frameinfo_avg_value">平均值</string>
<string name="dk_log_info_edt_hint">输入想要过滤的关键字</string>
<string name="dk_log_info_verbose">Verbose</string>
......@@ -179,6 +182,8 @@
<string name="dk_platform_monitor_data_button">开始测试</string>
<string name="dk_platform_monitor_data_button_stop">结束测试</string>
<string name="dk_platform_monitor_view_stat_data">查看统计数据</string>
<string name="dk_platform_monitor_page_data">页面数据</string>
<string name="dk_log_text_loading">日志加载中...</string>
</resources>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册