| /* |
| * Copyright (C) 2010-2011 0xlab - http://0xlab.org/ |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * 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. |
| * |
| * Authored by Julian Chu <walkingice@0xlab.org> and |
| * Joseph Chang (bizkit) <bizkit@0xlab.org> |
| */ |
| |
| package org.zeroxlab.benchmark; |
| |
| import android.util.Log; |
| |
| import android.app.Activity; |
| import android.app.ActivityManager; |
| import android.app.ProgressDialog; |
| import android.app.TabActivity; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.content.res.Configuration; |
| import android.os.Build; |
| import android.os.Bundle; |
| import android.os.Environment; |
| import android.os.Handler; |
| import android.os.Message; |
| import android.os.PowerManager; |
| import android.os.PowerManager.WakeLock; |
| import android.os.SystemClock; |
| import android.view.Gravity; |
| import android.view.KeyEvent; |
| import android.view.Menu; |
| import android.view.MenuItem; |
| import android.view.MotionEvent; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.webkit.WebView; |
| import android.webkit.WebViewClient; |
| import android.widget.Button; |
| import android.widget.CheckBox; |
| import android.widget.ImageView; |
| import android.widget.LinearLayout; |
| import android.widget.ScrollView; |
| import android.widget.TabHost; |
| import android.widget.TabHost.TabContentFactory; |
| import android.widget.TextView; |
| |
| import java.io.BufferedReader; |
| import java.io.File; |
| import java.io.FileOutputStream; |
| import java.io.FileReader; |
| import java.io.IOException; |
| import java.lang.StringBuffer; |
| import java.text.SimpleDateFormat; |
| import java.util.Arrays; |
| import java.util.Date; |
| import java.util.HashSet; |
| import java.util.HashMap; |
| import java.util.LinkedList; |
| import java.util.regex.Pattern; |
| import java.util.regex.Matcher; |
| import java.util.UUID; |
| |
| import org.json.JSONObject; |
| import org.json.JSONArray; |
| import org.json.JSONException; |
| import org.opensolaris.hub.libmicro.NativeCaseMicro; |
| import org.zeroxlab.byteunix.NativeCaseUbench;; |
| import org.zeroxlab.utils.BenchUtil; |
| |
| /* Construct a basic UI */ |
| public class Benchmark extends TabActivity implements View.OnClickListener { |
| |
| public final static String TAG = "Benchmark"; |
| public final static String PACKAGE = "org.zeroxlab.benchmark"; |
| |
| private final static String mOutputFile = "0xBenchmark"; |
| |
| private final static int GROUP_DEFAULT = 0; |
| private final static int SETTINGS_ID = Menu.FIRST; |
| |
| private static String mXMLResult; |
| private static String mJSONResult; |
| private final static String mOutputXMLFile = "0xBenchmark.xml"; |
| private final static String mOutputJSONFile = "0xBenchmark.bundle"; |
| |
| private Button mRun; |
| private Button mShow; |
| private CheckBox mCheckList[]; |
| private TextView mDesc[]; |
| private TextView mBannerInfo; |
| |
| private ScrollView mScrollView; |
| private LinearLayout mLinearLayout; |
| private LinearLayout mMainView; |
| private TabHost mTabHost; |
| |
| LinkedList<Case> mCases; |
| boolean mTouchable = true; |
| private int orientation = Configuration.ORIENTATION_UNDEFINED; |
| |
| private WakeLock mWakeLock; |
| |
| private final String MAIN = "Main"; |
| private final String D2 = "2D"; |
| private final String D3 = "3D"; |
| private final String MATH = "Math"; |
| private final String VM = "VM"; |
| private final String NATIVE = "Native"; |
| |
| private CheckBox d2CheckBox; |
| private CheckBox d3CheckBox; |
| private CheckBox mathCheckBox; |
| private CheckBox vmCheckBox; |
| private CheckBox nativeCheckBox; |
| |
| private HashMap< String, HashSet<Case> > mCategory = new HashMap< String, HashSet<Case> >(); |
| |
| private final String trackerUrl = "http://0xbenchmark.appspot.com/static/MobileTracker.html"; |
| |
| boolean mAutoRun = false; |
| boolean mCheckMath = false; |
| boolean mCheck2D = false; |
| boolean mCheck3D = false; |
| boolean mCheckVM = false; |
| boolean mCheckNative = false; |
| boolean mAutoUpload = false; |
| |
| @Override |
| protected void onDestroy() { |
| super.onPause(); |
| mWakeLock.release(); |
| } |
| |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| orientation = getResources().getConfiguration().orientation; |
| PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); |
| mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, TAG); |
| mWakeLock.acquire(); |
| |
| setContentView(R.layout.main); |
| mCases = new LinkedList<Case>(); |
| Case arith = new CaseArithmetic(); |
| Case scimark2 = new CaseScimark2(); |
| Case canvas = new CaseCanvas(); |
| Case glcube = new CaseGLCube(); |
| Case circle = new CaseDrawCircle(); |
| Case nehe08 = new CaseNeheLesson08(); |
| Case nehe16 = new CaseNeheLesson16(); |
| Case teapot = new CaseTeapot(); |
| Case gc = new CaseGC(); |
| Case libMicro = new NativeCaseMicro(); |
| Case libUbench = new NativeCaseUbench(); |
| |
| Case dc2 = new CaseDrawCircle2(); |
| Case dr = new CaseDrawRect(); |
| Case da = new CaseDrawArc(); |
| Case di = new CaseDrawImage(); |
| Case dt = new CaseDrawText(); |
| |
| mCategory.put(D2, new HashSet<Case>()); |
| mCategory.put(D3, new HashSet<Case>()); |
| mCategory.put(MATH, new HashSet<Case>()); |
| mCategory.put(VM, new HashSet<Case>()); |
| mCategory.put(NATIVE, new HashSet<Case>()); |
| |
| // mflops |
| mCases.add(arith); |
| mCases.add(scimark2); |
| mCategory.get(MATH).add(arith); |
| mCategory.get(MATH).add(scimark2); |
| |
| // 2d |
| mCases.add(canvas); |
| mCases.add(circle); |
| mCases.add(dc2); |
| mCases.add(dr); |
| mCases.add(da); |
| mCases.add(di); |
| mCases.add(dt); |
| |
| mCategory.get(D2).add(canvas); |
| mCategory.get(D2).add(circle); |
| mCategory.get(D2).add(dc2); |
| mCategory.get(D2).add(dr); |
| mCategory.get(D2).add(da); |
| mCategory.get(D2).add(di); |
| mCategory.get(D2).add(dt); |
| |
| // 3d |
| mCases.add(glcube); |
| mCases.add(nehe08); |
| mCases.add(nehe16); |
| mCases.add(teapot); |
| |
| mCategory.get(D3).add(glcube); |
| mCategory.get(D3).add(nehe08); |
| mCategory.get(D3).add(nehe16); |
| mCategory.get(D3).add(teapot); |
| |
| // vm |
| mCases.add(gc); |
| mCategory.get(VM).add(gc); |
| |
| // native |
| mCases.add(libMicro); |
| mCases.add(libUbench); |
| |
| mCategory.get(NATIVE).add(libMicro); |
| mCategory.get(NATIVE).add(libUbench); |
| |
| initViews(); |
| |
| Intent intent = getIntent(); |
| Bundle bundle = intent.getExtras(); |
| if (bundle != null) { |
| mAutoRun = bundle.getBoolean("autorun"); |
| mCheckMath = bundle.getBoolean("math"); |
| mCheck2D = bundle.getBoolean("2d"); |
| mCheck3D = bundle.getBoolean("3d"); |
| mCheckVM = bundle.getBoolean("vm"); |
| mCheckNative = bundle.getBoolean("native"); |
| mAutoUpload = bundle.getBoolean("autoupload"); |
| } |
| |
| if (mCheckMath && !mathCheckBox.isChecked()) { |
| mathCheckBox.performClick(); |
| } |
| |
| if (mCheck2D && !d2CheckBox.isChecked()) { |
| d2CheckBox.performClick(); |
| } |
| |
| if (mCheck3D && !d3CheckBox.isChecked()) { |
| d3CheckBox.performClick(); |
| } |
| |
| if (mCheckVM && !vmCheckBox.isChecked()) { |
| vmCheckBox.performClick(); |
| } |
| |
| if (mCheckNative && !nativeCheckBox.isChecked()) { |
| nativeCheckBox.performClick(); |
| } |
| /* |
| if (intent.getBooleanExtra("AUTO", false)) { |
| ImageView head = (ImageView)findViewById(R.id.banner_img); |
| head.setImageResource(R.drawable.icon_auto); |
| mTouchable = false; |
| initAuto(); |
| } |
| */ |
| if (mAutoRun) { |
| onClick(mRun); |
| } |
| } |
| |
| @Override |
| public boolean onCreateOptionsMenu(Menu menu) { |
| super.onCreateOptionsMenu(menu); |
| MenuItem item1 = menu.add(GROUP_DEFAULT, SETTINGS_ID, Menu.NONE, R.string.menu_settings); |
| return true; |
| } |
| |
| @Override |
| public boolean onOptionsItemSelected(MenuItem menu) { |
| if (menu.getGroupId() == GROUP_DEFAULT && menu.getItemId() == SETTINGS_ID) { |
| org.zeroxlab.utils.Util.launchActivity(this, "org.zeroxlab.benchmark.ActivitySettings"); |
| } |
| return true; |
| } |
| |
| @Override |
| public boolean dispatchTouchEvent(MotionEvent event) { |
| if (mTouchable) { |
| return super.dispatchTouchEvent(event); |
| } else { |
| return true; |
| } |
| } |
| |
| @Override |
| public boolean dispatchKeyEvent(KeyEvent event) { |
| if (mTouchable) { |
| return super.dispatchKeyEvent(event); |
| } else { |
| return true; |
| } |
| } |
| |
| @Override |
| public boolean dispatchTrackballEvent(MotionEvent event) { |
| if (mTouchable) { |
| return super.dispatchTrackballEvent(event); |
| } else { |
| return true; |
| } |
| } |
| |
| private void _checkTagCase(String [] Tags) { |
| Arrays.sort(Tags); |
| for (int i=0; i<mCheckList.length; i++) { |
| String [] caseTags = mCases.get(i).mTags; |
| for (String t: caseTags) { |
| int search = Arrays.binarySearch(Tags, t); |
| if ( search >= 0) |
| mCheckList[i].setChecked(true); |
| } |
| } |
| } |
| |
| private void _checkCatCase(String [] Cats) { |
| Arrays.sort(Cats); |
| for (int i=0; i<mCheckList.length; i++) { |
| int search = Arrays.binarySearch(Cats, mCases.get(i).mType); |
| if ( search >= 0) |
| mCheckList[i].setChecked(true); |
| } |
| } |
| |
| private void _checkAllCase(boolean check) { |
| for (int i=0; i<mCheckList.length; i++) |
| mCheckList[i].setChecked(check); |
| } |
| |
| private void initAuto() { |
| Intent intent = getIntent(); |
| String TAG = intent.getStringExtra("TAG"); |
| String CAT = intent.getStringExtra("CAT"); |
| |
| |
| _checkAllCase(false); |
| if (TAG != null) |
| _checkTagCase( TAG.split(",") ); |
| if (CAT != null) |
| _checkCatCase( CAT.split(",") ); |
| if (TAG == null && CAT == null) |
| _checkAllCase(true); |
| final Handler h = new Handler() { |
| public void handleMessage(Message msg) { |
| if (msg.what == 0x1234) |
| onClick(mRun); |
| } |
| }; |
| |
| final ProgressDialog dialog = new ProgressDialog(this).show(this, "Starting Benchmark", "Please wait...", true, false); |
| new Thread() { |
| public void run() { |
| SystemClock.sleep(1000); |
| dialog.dismiss(); |
| Message m = new Message(); |
| m.what = 0x1234; |
| h.sendMessage(m); |
| } |
| }.start(); |
| mTouchable = true; |
| } |
| |
| private void initViews() { |
| /* |
| mRun = (Button)findViewById(R.id.btn_run); |
| mRun.setOnClickListener(this); |
| |
| mShow = (Button)findViewById(R.id.btn_show); |
| mShow.setOnClickListener(this); |
| mShow.setClickable(false); |
| |
| mLinearLayout = (LinearLayout)findViewById(R.id.list_container); |
| mMainView = (LinearLayout)findViewById(R.id.main_view); |
| |
| mBannerInfo = (TextView)findViewById(R.id.banner_info); |
| mBannerInfo.setText("Hello!\nSelect cases to Run.\nUploaded results:\nhttp://0xbenchmark.appspot.com"); |
| */ |
| |
| mTabHost = getTabHost(); |
| |
| int length = mCases.size(); |
| mCheckList = new CheckBox[length]; |
| mDesc = new TextView[length]; |
| for (int i = 0; i < length; i++) { |
| mCheckList[i] = new CheckBox(this); |
| mCheckList[i].setText(mCases.get(i).getTitle()); |
| mDesc[i] = new TextView(this); |
| mDesc[i].setText(mCases.get(i).getDescription()); |
| mDesc[i].setTextSize(mDesc[i].getTextSize() - 2); |
| mDesc[i].setPadding(42, 0, 10, 10); |
| } |
| |
| TabContentFactory mTCF = new TabContentFactory() { |
| public View createTabContent(String tag) { |
| ViewGroup.LayoutParams fillParent = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT); |
| ViewGroup.LayoutParams fillWrap = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); |
| LinearLayout.LayoutParams wrapContent = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); |
| wrapContent.gravity = Gravity.CENTER; |
| LinearLayout.LayoutParams weightedFillWrap = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); |
| weightedFillWrap.weight = 1; |
| |
| if(tag.equals(MAIN)) { |
| |
| LinearLayout mMainView = new LinearLayout(Benchmark.this); |
| mMainView.setOrientation(1); |
| ScrollView mListScroll = new ScrollView(Benchmark.this); |
| |
| LinearLayout mMainViewContainer = new LinearLayout(Benchmark.this); |
| mMainViewContainer.setOrientation(1); |
| ImageView mIconView = new ImageView(Benchmark.this); |
| mIconView.setImageResource(R.drawable.icon); |
| |
| TextView mBannerInfo = new TextView(Benchmark.this); |
| mBannerInfo.setText("0xbench\nSelect benchmarks in the tabs,\nor batch select:"); |
| |
| d2CheckBox = new CheckBox(Benchmark.this); |
| d2CheckBox.setText(D2); |
| d2CheckBox.setOnClickListener(Benchmark.this); |
| |
| d3CheckBox = new CheckBox(Benchmark.this); |
| d3CheckBox.setText(D3); |
| d3CheckBox.setOnClickListener(Benchmark.this); |
| |
| mathCheckBox = new CheckBox(Benchmark.this); |
| mathCheckBox.setText(MATH); |
| mathCheckBox.setOnClickListener(Benchmark.this); |
| |
| vmCheckBox = new CheckBox(Benchmark.this); |
| vmCheckBox.setText(VM); |
| vmCheckBox.setOnClickListener(Benchmark.this); |
| |
| nativeCheckBox = new CheckBox(Benchmark.this); |
| nativeCheckBox.setText(NATIVE); |
| nativeCheckBox.setOnClickListener(Benchmark.this); |
| |
| TextView mWebInfo = new TextView(Benchmark.this); |
| mWebInfo.setText("Uploaded results:\nhttp://0xbenchmark.appspot.com"); |
| |
| LinearLayout mButtonContainer = new LinearLayout(Benchmark.this); |
| mRun = new Button(Benchmark.this); |
| mShow = new Button(Benchmark.this); |
| mRun.setText("Run"); |
| mShow.setText("Show"); |
| mRun.setOnClickListener(Benchmark.this); |
| mShow.setOnClickListener(Benchmark.this); |
| mButtonContainer.addView(mRun, weightedFillWrap); |
| mButtonContainer.addView(mShow, weightedFillWrap); |
| WebView mTracker = new WebView(Benchmark.this); |
| mTracker.clearCache(true); |
| mTracker.setWebViewClient(new WebViewClient (){ |
| public void onPageFinished(WebView view, String url){ |
| Log.i(TAG, "Tracker: " + view.getTitle() + " -> " + url); |
| } |
| public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { |
| Log.e(TAG, "Track err: " + description); |
| } |
| }); |
| mTracker.loadUrl(trackerUrl); |
| mMainViewContainer.addView(mIconView,wrapContent); |
| mMainViewContainer.addView(mBannerInfo); |
| mMainViewContainer.addView(mathCheckBox); |
| mMainViewContainer.addView(d2CheckBox); |
| mMainViewContainer.addView(d3CheckBox); |
| mMainViewContainer.addView(vmCheckBox); |
| mMainViewContainer.addView(nativeCheckBox); |
| mMainViewContainer.addView(mWebInfo); |
| mMainViewContainer.addView(mButtonContainer, fillWrap); |
| mMainViewContainer.addView(mTracker, 0,0); |
| mListScroll.addView(mMainViewContainer, fillParent); |
| mMainView.addView(mListScroll, fillWrap); |
| |
| return mMainView; |
| |
| } |
| |
| LinearLayout mMainView = new LinearLayout(Benchmark.this); |
| mMainView.setOrientation(1); |
| ScrollView mListScroll = new ScrollView(Benchmark.this); |
| LinearLayout mListContainer = new LinearLayout(Benchmark.this); |
| mListContainer.setOrientation(1); |
| mListScroll.addView(mListContainer, fillParent); |
| mMainView.addView(mListScroll, fillWrap); |
| |
| boolean gray = true; |
| int length = mCases.size(); |
| Log.i(TAG, "L: " + length); |
| Log.i(TAG, "TCF: " + tag); |
| for (int i = 0; i < length; i++) { |
| if(!mCategory.get(tag).contains(mCases.get(i))) |
| continue; |
| Log.i(TAG, "Add: " + i); |
| mListContainer.addView(mCheckList[i], fillWrap); |
| mListContainer.addView(mDesc[i], fillWrap); |
| if (gray) { |
| int color = 0xFF333333; //ARGB |
| mCheckList[i].setBackgroundColor(color); |
| mDesc[i].setBackgroundColor(color); |
| } |
| gray = !gray; |
| } |
| return mMainView; |
| } |
| }; |
| |
| mTabHost.addTab(mTabHost.newTabSpec(MAIN).setIndicator(MAIN, getResources().getDrawable(R.drawable.ic_eye)).setContent(mTCF)); |
| mTabHost.addTab(mTabHost.newTabSpec(D2).setIndicator(D2, getResources().getDrawable(R.drawable.ic_2d)).setContent(mTCF)); |
| mTabHost.addTab(mTabHost.newTabSpec(D3).setIndicator(D3, getResources().getDrawable(R.drawable.ic_3d)).setContent(mTCF)); |
| mTabHost.addTab(mTabHost.newTabSpec(MATH).setIndicator(MATH, getResources().getDrawable(R.drawable.ic_pi)).setContent(mTCF)); |
| mTabHost.addTab(mTabHost.newTabSpec(VM).setIndicator(VM, getResources().getDrawable(R.drawable.ic_vm)).setContent(mTCF)); |
| mTabHost.addTab(mTabHost.newTabSpec(NATIVE).setIndicator(NATIVE, getResources().getDrawable(R.drawable.ic_c)).setContent(mTCF)); |
| |
| } |
| |
| public void onClick(View v) { |
| if (v == mRun) { |
| int numberOfCaseChecked = 0; |
| for (int i = 0; i < mCheckList.length; i++) { |
| if (mCheckList[i].isChecked()) { |
| mCases.get(i).reset(); |
| numberOfCaseChecked++; |
| } else { |
| mCases.get(i).clear(); |
| } |
| } |
| if(numberOfCaseChecked>0) |
| runCase(mCases); |
| } else if (v == mShow) { |
| String result = getResult(); |
| Log.i(TAG,"\n\n"+result+"\n\n"); |
| writeResult(mOutputFile, result); |
| Intent intent = new Intent(); |
| intent.putExtra(Report.REPORT, result); |
| intent.putExtra(Report.XML, mXMLResult); |
| if (mAutoUpload) { |
| intent.putExtra(Report.AUTOUPLOAD, true); |
| mAutoUpload = false; |
| } |
| intent.setClassName(Report.packageName(), Report.fullClassName()); |
| startActivity(intent); |
| } else if (v==d2CheckBox || v==d3CheckBox || v==mathCheckBox || v==vmCheckBox || v==nativeCheckBox) { |
| int length = mCases.size(); |
| String tag = ((CheckBox)v).getText().toString(); |
| for (int i = 0; i < length; i++) { |
| if(!mCategory.get(tag).contains(mCases.get(i))) |
| continue; |
| mCheckList[i].setChecked(((CheckBox)v).isChecked()); |
| } |
| } |
| } |
| |
| public void runCase(LinkedList<Case> list) { |
| Case pointer = null; |
| boolean finish = true; |
| for (int i = 0; i < list.size(); i++) { |
| pointer = list.get(i); |
| if (!pointer.isFinish()) { |
| finish = false; |
| break; |
| } |
| } |
| |
| if (finish) { |
| // mBannerInfo.setText("Benchmarking complete.\nClick Show to upload.\nUploaded results:\nhttp://0xbenchmark.appspot.com"); |
| String result = getResult(); |
| writeResult(mOutputFile, result); |
| |
| final ProgressDialog dialogGetXml = new ProgressDialog(this).show(this, "Generating XML Report", "Please wait...", true, false); |
| new Thread() { |
| public void run() { |
| mJSONResult = getJSONResult(); |
| mXMLResult = getXMLResult(); |
| Log.d(TAG, "XML: " + mXMLResult); |
| writeResult(mOutputXMLFile, mXMLResult); |
| Log.d(TAG, "JSON: " + mJSONResult); |
| writeResult(mOutputJSONFile, mJSONResult); |
| mShow.setClickable(true); |
| onClick(mShow); |
| mTouchable = true; |
| dialogGetXml.dismiss(); |
| } |
| }.start(); |
| } else { |
| Intent intent = pointer.generateIntent(); |
| if (intent != null) { |
| startActivityForResult(intent, 0); |
| } |
| } |
| } |
| |
| public String getXMLResult() { |
| if (mCases.size() == 0) |
| return ""; |
| |
| Date date = new Date(); |
| //2010-05-28T17:40:25CST |
| SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"); |
| |
| String xml = ""; |
| xml += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; |
| xml += "<result"; |
| xml += " executedTimestamp=\"" + sdf.format(date) + "\""; |
| xml += " manufacturer=\"" + Build.MANUFACTURER.replace(' ', '_') + "\""; |
| xml += " model=\"" + Build.MODEL.replace(' ', '_') + ":" + Build.DISPLAY + "\""; |
| xml += " buildTimestamp=\"" + sdf.format(new Date(Build.TIME)) + "\""; |
| xml += " orientation=\"" + Integer.toString(orientation) + "\""; |
| |
| try { // read kernel version |
| BufferedReader procVersion = new BufferedReader( new FileReader("/proc/version") ); |
| StringBuffer sbuff = new StringBuffer(); |
| String tmp; |
| while ( (tmp = procVersion.readLine()) != null) |
| sbuff.append(tmp); |
| procVersion.close(); |
| tmp = sbuff.toString().replace("[\n\r]+", " ").replace(" +", "."); |
| xml += " version=\"" + tmp + "\""; |
| } catch (IOException e){ |
| Log.e(TAG, "opening /proc/version failed: " + e.toString()); |
| } |
| |
| try { // read and parse cpu info |
| BufferedReader procVersion = new BufferedReader( new FileReader("/proc/cpuinfo") ); |
| StringBuffer sbuff = new StringBuffer(); |
| String tmp; |
| while ( (tmp = procVersion.readLine()) != null) |
| sbuff.append(tmp + "\n"); |
| procVersion.close(); |
| |
| tmp = sbuff.toString(); |
| |
| sbuff = new StringBuffer(); |
| |
| Pattern p1 = Pattern.compile("(Processor\\s*:\\s*(.*)\\s*[\n\r]+)"); |
| Matcher m1 = p1.matcher(tmp); |
| if (m1.find()) sbuff.append(m1.group(2)); |
| |
| Pattern p2 = Pattern.compile("(Hardware\\s*:\\s*(.*)\\s*[\n\r]+)"); |
| Matcher m2 = p2.matcher(tmp); |
| if (m2.find()) sbuff.append(":"+m2.group(2)); |
| |
| Pattern p3 = Pattern.compile("(Revision\\s*:\\s*(.*)\\s*[\n\r]+)"); |
| Matcher m3 = p3.matcher(tmp); |
| if (m3.find()) sbuff.append(":"+m3.group(2)); |
| |
| Log.e(TAG, sbuff.toString()); |
| xml += " cpu=\"" + sbuff.toString() + "\""; |
| } catch (IOException e){ |
| Log.e(TAG, "opening /proc/version failed: " + e.toString()); |
| } |
| |
| xml += ">"; |
| |
| Case mycase; |
| for (int i = 0; i < mCases.size(); i++) { |
| mycase = mCases.get(i); |
| xml += mycase.getXMLBenchmark(); |
| } |
| |
| xml += "</result>"; |
| return xml; |
| } |
| |
| /* |
| * Add Linaro Dashboard Bundle's JSON format support |
| * https://launchpad.net/linaro-python-dashboard-bundle/trunk |
| */ |
| public String getJSONResult() { |
| Date date = new Date(); |
| SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); |
| |
| JSONObject result = new JSONObject(); |
| try { |
| JSONArray testRunsArray = new JSONArray(); |
| JSONObject testRunsObject = new JSONObject(); |
| testRunsObject.put("analyzer_assigned_date", sdf.format(date)); |
| testRunsObject.put("time_check_performed", false); |
| // TODO: should be UUID version 1 |
| testRunsObject.put("analyzer_assigned_uuid", UUID.randomUUID().toString()); |
| testRunsObject.put("test_id", "0xbench"); |
| |
| JSONArray testResultsList = new JSONArray(); |
| Case myCase; |
| for (int i = 0; i < mCases.size(); i++) { |
| myCase = mCases.get(i); |
| JSONArray caseResultList = myCase.getJSONBenchmark(); |
| for (int j = 0; j < caseResultList.length(); j++) { |
| testResultsList.put(caseResultList.get(j)); |
| } |
| } |
| testRunsObject.put("test_results", testResultsList); |
| |
| testRunsArray.put(testRunsObject); |
| result.put("test_runs", testRunsArray); |
| result.put("format", "Dashboard Bundle Format 1.2"); |
| } |
| catch (JSONException jsonE) { |
| jsonE.printStackTrace(); |
| } |
| return result.toString(); |
| } |
| |
| public String getResult() { |
| String result = ""; |
| Case mycase; |
| for (int i = 0; i < mCases.size(); i++) { |
| mycase = mCases.get(i); |
| if ( !mycase.couldFetchReport() ) continue; |
| result += "============================================================\n"; |
| result += mycase.getTitle() + "\n"; |
| result += "------------------------------------------------------------\n"; |
| result += mycase.getResultOutput().trim() + "\n"; |
| } |
| result += "============================================================\n"; |
| |
| return result; |
| } |
| |
| protected void onActivityResult(int requestCode, int resultCode, Intent data) { |
| if (data == null) { |
| Log.i(TAG,"oooops....Intent is null"); |
| return; |
| } |
| |
| Case mycase; |
| for (int i = 0; i < mCases.size(); i++) { |
| mycase = mCases.get(i); |
| if (mycase.realize(data)) { |
| mycase.parseIntent(data); |
| break; |
| } |
| } |
| runCase(mCases); |
| } |
| |
| private boolean writeResult(String filename, String output) { |
| File writeDir = new File(BenchUtil.getResultDir(this)); |
| if (!writeDir.exists()) { |
| writeDir.mkdirs(); |
| } |
| |
| File file = new File(writeDir, filename); |
| if (file.exists()) { |
| Log.w(TAG, "File exists, delete " + writeDir.getPath() + filename); |
| file.delete(); |
| } |
| |
| try { |
| file.createNewFile(); |
| FileOutputStream fos = new FileOutputStream(file); |
| fos.write(output.getBytes()); |
| fos.flush(); |
| } catch (Exception e) { |
| Log.i(TAG, "Write Failed."); |
| e.printStackTrace(); |
| return false; |
| } |
| return true; |
| } |
| } |