From 0ab09fcf7b8471ae83f84d2e8a63207a4ea8a9b2 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 30 Oct 2017 09:26:11 -0700 Subject: [PATCH] Deleting sample code demonstrating how to extend Launcher3 Launcher already includes Launcher3Go build flavour and we will be adding another build flavour for RecentsUI. There is no need to maintain another build which is not used anywhere. Change-Id: I9287f62691d57750460ccc9d6859c7fa11c99956 --- AndroidManifest.xml | 48 ---- res/layout/zzz_weight_watcher.xml | 4 - src/com/android/launcher3/Launcher.java | 5 - .../android/launcher3/LauncherAppState.java | 6 - .../launcher3/testing/LauncherExtension.java | 128 --------- .../launcher3/testing/MemoryDumpActivity.java | 183 ------------ .../launcher3/testing/MemoryTracker.java | 217 -------------- .../testing/ToggleWeightWatcher.java | 31 -- .../launcher3/testing/WeightWatcher.java | 267 ------------------ .../android/launcher3/util/TestingUtils.java | 51 ---- 10 files changed, 940 deletions(-) delete mode 100644 res/layout/zzz_weight_watcher.xml delete mode 100644 src/com/android/launcher3/testing/LauncherExtension.java delete mode 100644 src/com/android/launcher3/testing/MemoryDumpActivity.java delete mode 100644 src/com/android/launcher3/testing/MemoryTracker.java delete mode 100644 src/com/android/launcher3/testing/ToggleWeightWatcher.java delete mode 100644 src/com/android/launcher3/testing/WeightWatcher.java delete mode 100644 src/com/android/launcher3/util/TestingUtils.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 23bddf62f4..6ef78285f2 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -112,53 +112,5 @@ android:writePermission="com.android.launcher3.permission.WRITE_SETTINGS" android:readPermission="com.android.launcher3.permission.READ_SETTINGS" /> - - diff --git a/res/layout/zzz_weight_watcher.xml b/res/layout/zzz_weight_watcher.xml deleted file mode 100644 index 07fd39e91f..0000000000 --- a/res/layout/zzz_weight_watcher.xml +++ /dev/null @@ -1,4 +0,0 @@ - - diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 2593c49405..6b5ee5eafb 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -133,7 +133,6 @@ import com.android.launcher3.util.PackageUserKey; import com.android.launcher3.util.PendingRequestArgs; import com.android.launcher3.util.RunnableWithId; import com.android.launcher3.util.SystemUiController; -import com.android.launcher3.util.TestingUtils; import com.android.launcher3.util.Themes; import com.android.launcher3.util.Thunk; import com.android.launcher3.util.TraceHelper; @@ -1095,10 +1094,6 @@ public class Launcher extends BaseActivity mDropTargetBar.setup(mDragController); mAllAppsController.setupViews(mAppsView, mHotseat, mWorkspace); - - if (TestingUtils.MEMORY_DUMP_ENABLED) { - TestingUtils.addWeightWatcher(this); - } } private void setupOverviewPanel() { diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java index dfb30fd35c..0136c7087f 100644 --- a/src/com/android/launcher3/LauncherAppState.java +++ b/src/com/android/launcher3/LauncherAppState.java @@ -27,12 +27,10 @@ import android.util.Log; import com.android.launcher3.compat.LauncherAppsCompat; import com.android.launcher3.compat.PackageInstallerCompat; import com.android.launcher3.compat.UserManagerCompat; -import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.notification.NotificationListener; import com.android.launcher3.util.ConfigMonitor; import com.android.launcher3.util.Preconditions; import com.android.launcher3.util.SettingsObserver; -import com.android.launcher3.util.TestingUtils; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; @@ -88,10 +86,6 @@ public class LauncherAppState { Preconditions.assertUIThread(); mContext = context; - if (TestingUtils.MEMORY_DUMP_ENABLED) { - TestingUtils.startTrackingMemory(mContext); - } - mInvariantDeviceProfile = new InvariantDeviceProfile(mContext); mIconCache = new IconCache(mContext, mInvariantDeviceProfile); mWidgetCache = new WidgetPreviewLoader(mContext, mIconCache); diff --git a/src/com/android/launcher3/testing/LauncherExtension.java b/src/com/android/launcher3/testing/LauncherExtension.java deleted file mode 100644 index c40e1fbe4f..0000000000 --- a/src/com/android/launcher3/testing/LauncherExtension.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.android.launcher3.testing; - -import android.content.Intent; -import android.os.Bundle; -import android.view.Menu; - -import com.android.launcher3.AppInfo; -import com.android.launcher3.Launcher; -import com.android.launcher3.LauncherCallbacks; - -import java.io.FileDescriptor; -import java.io.PrintWriter; -import java.util.ArrayList; - -/** - * This class represents a very trivial LauncherExtension. It primarily serves as a simple - * class to exercise the LauncherOverlay interface. - */ -public class LauncherExtension extends Launcher { - - //------ Activity methods -------// - @Override - public void onCreate(Bundle savedInstanceState) { - setLauncherCallbacks(new LauncherExtensionCallbacks()); - super.onCreate(savedInstanceState); - } - - public class LauncherExtensionCallbacks implements LauncherCallbacks { - - @Override - public void preOnCreate() { - } - - @Override - public void onCreate(Bundle savedInstanceState) { - } - - @Override - public void onResume() { - } - - @Override - public void onStart() { - } - - @Override - public void onStop() { - } - - @Override - public void onPause() { - } - - @Override - public void onDestroy() { - } - - @Override - public void onSaveInstanceState(Bundle outState) { - } - - @Override - public void onNewIntent(Intent intent) { - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - } - - @Override - public void onRequestPermissionsResult(int requestCode, String[] permissions, - int[] grantResults) { - } - - @Override - public void onWindowFocusChanged(boolean hasFocus) { - } - - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - return false; - } - - @Override - public void dump(String prefix, FileDescriptor fd, PrintWriter w, String[] args) { - } - - @Override - public void onHomeIntent() { - } - - @Override - public boolean handleBackPressed() { - return false; - } - - @Override - public void onTrimMemory(int level) { - } - - @Override - public void onLauncherProviderChange() { - } - - @Override - public void bindAllApplications(ArrayList apps) { - } - - @Override - public boolean startSearch(String initialQuery, boolean selectInitialQuery, - Bundle appSearchData) { - return false; - } - - @Override - public boolean hasSettings() { - return false; - } - - @Override - public void onAttachedToWindow() { - } - - @Override - public void onDetachedFromWindow() { - } - } -} diff --git a/src/com/android/launcher3/testing/MemoryDumpActivity.java b/src/com/android/launcher3/testing/MemoryDumpActivity.java deleted file mode 100644 index 9bcf92b1b2..0000000000 --- a/src/com/android/launcher3/testing/MemoryDumpActivity.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * 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. - */ - -package com.android.launcher3.testing; - -import android.app.Activity; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.ServiceConnection; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.os.Environment; -import android.os.IBinder; -import android.util.Log; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -public class MemoryDumpActivity extends Activity { - private static final String TAG = "MemoryDumpActivity"; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - - public static String zipUp(ArrayList paths) { - final int BUFSIZ = 256 * 1024; // 256K - final byte[] buf = new byte[BUFSIZ]; - final String zipfilePath = String.format("%s/hprof-%d.zip", - Environment.getExternalStorageDirectory(), - System.currentTimeMillis()); - ZipOutputStream zos = null; - try { - OutputStream os = new FileOutputStream(zipfilePath); - zos = new ZipOutputStream(new BufferedOutputStream(os)); - for (String filename : paths) { - InputStream is = null; - try { - is = new BufferedInputStream(new FileInputStream(filename)); - ZipEntry entry = new ZipEntry(filename); - zos.putNextEntry(entry); - int len; - while ( 0 < (len = is.read(buf, 0, BUFSIZ)) ) { - zos.write(buf, 0, len); - } - zos.closeEntry(); - } finally { - is.close(); - } - } - } catch (IOException e) { - Log.e(TAG, "error zipping up profile data", e); - return null; - } finally { - if (zos != null) { - try { - zos.close(); - } catch (IOException e) { - // ugh, whatever - } - } - } - return zipfilePath; - } - - public static void dumpHprofAndShare(final Context context, MemoryTracker tracker) { - final StringBuilder body = new StringBuilder(); - - final ArrayList paths = new ArrayList(); - final int myPid = android.os.Process.myPid(); - - final int[] pids_orig = tracker.getTrackedProcesses(); - final int[] pids_copy = Arrays.copyOf(pids_orig, pids_orig.length); - for (int pid : pids_copy) { - MemoryTracker.ProcessMemInfo info = tracker.getMemInfo(pid); - if (info != null) { - body.append("pid ").append(pid).append(":") - .append(" up=").append(info.getUptime()) - .append(" pss=").append(info.currentPss) - .append(" uss=").append(info.currentUss) - .append("\n"); - } - if (pid == myPid) { - final String path = String.format("%s/launcher-memory-%d.ahprof", - Environment.getExternalStorageDirectory(), - pid); - Log.v(TAG, "Dumping memory info for process " + pid + " to " + path); - try { - android.os.Debug.dumpHprofData(path); // will block - } catch (IOException e) { - Log.e(TAG, "error dumping memory:", e); - } - paths.add(path); - } - } - - String zipfile = zipUp(paths); - - if (zipfile == null) return; - - Intent shareIntent = new Intent(Intent.ACTION_SEND); - shareIntent.setType("application/zip"); - - final PackageManager pm = context.getPackageManager(); - shareIntent.putExtra(Intent.EXTRA_SUBJECT, String.format("Launcher memory dump (%d)", myPid)); - String appVersion; - try { - appVersion = pm.getPackageInfo(context.getPackageName(), 0).versionName; - } catch (PackageManager.NameNotFoundException e) { - appVersion = "?"; - } - - body.append("\nApp version: ").append(appVersion).append("\nBuild: ").append(Build.DISPLAY).append("\n"); - shareIntent.putExtra(Intent.EXTRA_TEXT, body.toString()); - - final File pathFile = new File(zipfile); - final Uri pathUri = Uri.fromFile(pathFile); - - shareIntent.putExtra(Intent.EXTRA_STREAM, pathUri); - context.startActivity(shareIntent); - } - - @Override - public void onStart() { - super.onStart(); - - startDump(this, new Runnable() { - @Override - public void run() { - finish(); - } - }); - } - - public static void startDump(final Context context) { - startDump(context, null); - } - - public static void startDump(final Context context, final Runnable andThen) { - final ServiceConnection connection = new ServiceConnection() { - public void onServiceConnected(ComponentName className, IBinder service) { - Log.v(TAG, "service connected, dumping..."); - dumpHprofAndShare(context, - ((MemoryTracker.MemoryTrackerInterface) service).getService()); - context.unbindService(this); - if (andThen != null) andThen.run(); - } - - public void onServiceDisconnected(ComponentName className) { - } - }; - Log.v(TAG, "attempting to bind to memory tracker"); - context.bindService(new Intent(context, MemoryTracker.class), - connection, Context.BIND_AUTO_CREATE); - } -} diff --git a/src/com/android/launcher3/testing/MemoryTracker.java b/src/com/android/launcher3/testing/MemoryTracker.java deleted file mode 100644 index ed2a3122c0..0000000000 --- a/src/com/android/launcher3/testing/MemoryTracker.java +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * 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. - */ - -package com.android.launcher3.testing; - -import android.app.ActivityManager; -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.os.Binder; -import android.os.Debug; -import android.os.Handler; -import android.os.IBinder; -import android.os.Message; -import android.os.SystemClock; -import android.util.Log; -import android.util.LongSparseArray; - -import com.android.launcher3.util.TestingUtils; - -import java.util.ArrayList; -import java.util.List; - -public class MemoryTracker extends Service { - public static final String TAG = MemoryTracker.class.getSimpleName(); - - private static final long UPDATE_RATE = 5000; - - private static final int MSG_START = 1; - private static final int MSG_STOP = 2; - private static final int MSG_UPDATE = 3; - - public static class ProcessMemInfo { - public int pid; - public String name; - public long startTime; - public long currentPss, currentUss; - public long[] pss = new long[256]; - public long[] uss = new long[256]; - //= new Meminfo[(int) (30 * 60 / (UPDATE_RATE / 1000))]; // 30 minutes - public long max = 1; - public int head = 0; - public ProcessMemInfo(int pid, String name, long start) { - this.pid = pid; - this.name = name; - this.startTime = start; - } - public long getUptime() { - return System.currentTimeMillis() - startTime; - } - }; - public final LongSparseArray mData = new LongSparseArray(); - public final ArrayList mPids = new ArrayList(); - private int[] mPidsArray = new int[0]; - private final Object mLock = new Object(); - - Handler mHandler = new Handler() { - @Override - public void handleMessage(Message m) { - switch (m.what) { - case MSG_START: - mHandler.removeMessages(MSG_UPDATE); - mHandler.sendEmptyMessage(MSG_UPDATE); - break; - case MSG_STOP: - mHandler.removeMessages(MSG_UPDATE); - break; - case MSG_UPDATE: - update(); - mHandler.removeMessages(MSG_UPDATE); - mHandler.sendEmptyMessageDelayed(MSG_UPDATE, UPDATE_RATE); - break; - } - } - }; - - ActivityManager mAm; - - public ProcessMemInfo getMemInfo(int pid) { - return mData.get(pid); - } - - public int[] getTrackedProcesses() { - return mPidsArray; - } - - public void startTrackingProcess(int pid, String name, long start) { - synchronized (mLock) { - final Long lpid = Long.valueOf(pid); - - if (mPids.contains(lpid)) return; - - mPids.add(lpid); - updatePidsArrayL(); - - mData.put(pid, new ProcessMemInfo(pid, name, start)); - } - } - - void updatePidsArrayL() { - final int N = mPids.size(); - mPidsArray = new int[N]; - StringBuffer sb = new StringBuffer("Now tracking processes: "); - for (int i=0; i mPids.size()) { - Log.e(TAG, "update: unknown process info received: " + dinfo); - break; - } - final long pid = mPids.get(i).intValue(); - final ProcessMemInfo info = mData.get(pid); - info.head = (info.head+1) % info.pss.length; - info.pss[info.head] = info.currentPss = dinfo.getTotalPss(); - info.uss[info.head] = info.currentUss = dinfo.getTotalPrivateDirty(); - if (info.currentPss > info.max) info.max = info.currentPss; - if (info.currentUss > info.max) info.max = info.currentUss; - // Log.v(TAG, "update: pid " + pid + " pss=" + info.currentPss + " uss=" + info.currentUss); - if (info.currentPss == 0) { - Log.v(TAG, "update: pid " + pid + " has pss=0, it probably died"); - mData.remove(pid); - } - } - for (int i=mPids.size()-1; i>=0; i--) { - final long pid = mPids.get(i).intValue(); - if (mData.get(pid) == null) { - mPids.remove(i); - updatePidsArrayL(); - } - } - } - } - - @Override - public void onCreate() { - mAm = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); - - // catch up in case we crashed but other processes are still running - List svcs = mAm.getRunningServices(256); - for (ActivityManager.RunningServiceInfo svc : svcs) { - if (svc.service.getPackageName().equals(getPackageName())) { - Log.v(TAG, "discovered running service: " + svc.process + " (" + svc.pid + ")"); - startTrackingProcess(svc.pid, svc.process, - System.currentTimeMillis() - (SystemClock.elapsedRealtime() - svc.activeSince)); - } - } - - List procs = mAm.getRunningAppProcesses(); - for (ActivityManager.RunningAppProcessInfo proc : procs) { - final String pname = proc.processName; - if (pname.startsWith(getPackageName())) { - Log.v(TAG, "discovered other running process: " + pname + " (" + proc.pid + ")"); - startTrackingProcess(proc.pid, pname, System.currentTimeMillis()); - } - } - } - - @Override - public void onDestroy() { - mHandler.sendEmptyMessage(MSG_STOP); - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - Log.v(TAG, "Received start id " + startId + ": " + intent); - - if (intent != null) { - if (TestingUtils.ACTION_START_TRACKING.equals(intent.getAction())) { - final int pid = intent.getIntExtra("pid", -1); - final String name = intent.getStringExtra("name"); - final long start = intent.getLongExtra("start", System.currentTimeMillis()); - startTrackingProcess(pid, name, start); - } - } - - mHandler.sendEmptyMessage(MSG_START); - - return START_STICKY; - } - - public class MemoryTrackerInterface extends Binder { - MemoryTracker getService() { - return MemoryTracker.this; - } - } - - private final IBinder mBinder = new MemoryTrackerInterface(); - - public IBinder onBind(Intent intent) { - mHandler.sendEmptyMessage(MSG_START); - - return mBinder; - } -} diff --git a/src/com/android/launcher3/testing/ToggleWeightWatcher.java b/src/com/android/launcher3/testing/ToggleWeightWatcher.java deleted file mode 100644 index f0c39202ba..0000000000 --- a/src/com/android/launcher3/testing/ToggleWeightWatcher.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.android.launcher3.testing; - -import android.app.Activity; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.view.View; - -import com.android.launcher3.Launcher; -import com.android.launcher3.LauncherAppState; -import com.android.launcher3.Utilities; -import com.android.launcher3.util.TestingUtils; - -public class ToggleWeightWatcher extends Activity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - SharedPreferences sp = Utilities.getPrefs(this); - boolean show = sp.getBoolean(TestingUtils.SHOW_WEIGHT_WATCHER, true); - - show = !show; - sp.edit().putBoolean(TestingUtils.SHOW_WEIGHT_WATCHER, show).apply(); - - Launcher launcher = (Launcher) LauncherAppState.getInstance(this).getModel().getCallback(); - if (launcher != null && launcher.mWeightWatcher != null) { - launcher.mWeightWatcher.setVisibility(show ? View.VISIBLE : View.GONE); - } - finish(); - } -} diff --git a/src/com/android/launcher3/testing/WeightWatcher.java b/src/com/android/launcher3/testing/WeightWatcher.java deleted file mode 100644 index a26a2b6420..0000000000 --- a/src/com/android/launcher3/testing/WeightWatcher.java +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * 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. - */ - -package com.android.launcher3.testing; - -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.ServiceConnection; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.os.Handler; -import android.os.IBinder; -import android.os.Message; -import android.util.AttributeSet; -import android.util.Log; -import android.util.TypedValue; -import android.view.Gravity; -import android.view.View; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.android.launcher3.util.Thunk; - -public class WeightWatcher extends LinearLayout { - private static final int RAM_GRAPH_RSS_COLOR = 0xFF990000; - private static final int RAM_GRAPH_PSS_COLOR = 0xFF99CC00; - private static final int TEXT_COLOR = 0xFFFFFFFF; - private static final int BACKGROUND_COLOR = 0xc0000000; - - private static final int UPDATE_RATE = 5000; - - private static final int MSG_START = 1; - private static final int MSG_STOP = 2; - private static final int MSG_UPDATE = 3; - - static int indexOf(int[] a, int x) { - for (int i=0; i 0) { - sec -= days * 86400; - sb.append(days); - sb.append("d"); - } - - long hours = sec / 3600; - if (hours > 0) { - sec -= hours * 3600; - sb.append(hours); - sb.append("h"); - } - - long mins = sec / 60; - if (mins > 0) { - sec -= mins * 60; - sb.append(mins); - sb.append("m"); - } - - sb.append(sec); - sb.append("s"); - return sb.toString(); - } - - public void update() { - //Log.v("WeightWatcher.ProcessWatcher", - // "MSG_UPDATE pss=" + mMemInfo.currentPss); - mText.setText("(" + mPid - + (mPid == android.os.Process.myPid() - ? "/A" // app - : "/S") // service - + ") up " + getUptimeString() - + " P=" + mMemInfo.currentPss - + " U=" + mMemInfo.currentUss - ); - mRamGraph.invalidate(); - } - - public class GraphView extends View { - Paint pssPaint, ussPaint, headPaint; - - public GraphView(Context context, AttributeSet attrs) { - super(context, attrs); - - pssPaint = new Paint(); - pssPaint.setColor(RAM_GRAPH_PSS_COLOR); - ussPaint = new Paint(); - ussPaint.setColor(RAM_GRAPH_RSS_COLOR); - headPaint = new Paint(); - headPaint.setColor(Color.WHITE); - } - - public GraphView(Context context) { - this(context, null); - } - - @Override - public void onDraw(Canvas c) { - int w = c.getWidth(); - int h = c.getHeight(); - - if (mMemInfo == null) return; - - final int N = mMemInfo.pss.length; - final float barStep = (float) w / N; - final float barWidth = Math.max(1, barStep); - final float scale = (float) h / mMemInfo.max; - - int i; - float x; - for (i=0; i