• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.development;
18 
19 import java.io.File;
20 import java.io.FileOutputStream;
21 import java.io.IOException;
22 
23 import android.app.Activity;
24 import android.app.ActivityManagerNative;
25 import android.app.IActivityController;
26 import android.app.IActivityManager;
27 import android.app.Service;
28 import android.content.BroadcastReceiver;
29 import android.content.Context;
30 import android.content.Intent;
31 import android.content.IntentFilter;
32 import android.os.AsyncTask;
33 import android.os.Bundle;
34 import android.os.IBinder;
35 import android.os.IPowerManager;
36 import android.os.Process;
37 import android.os.RemoteException;
38 import android.os.ServiceManager;
39 import android.util.Log;
40 import android.view.View;
41 import android.widget.Button;
42 
43 public class CacheAbuser extends Activity {
44     Button mStartInternalAbuse;
45     Button mStartSlowInternalAbuse;
46     Button mStartExternalAbuse;
47     Button mStartSlowExternalAbuse;
48     Button mStopAbuse;
49 
50     AsyncTask<Void, Void, Void> mInternalAbuseTask;
51     AsyncTask<Void, Void, Void> mExternalAbuseTask;
52 
53     static class AbuseTask extends AsyncTask<Void, Void, Void> {
54         final File mBaseDir;
55         final boolean mQuick;
56         final byte[] mBuffer;
57 
AbuseTask(File cacheDir, boolean quick)58         AbuseTask(File cacheDir, boolean quick) {
59             File dir = new File(cacheDir, quick ? "quick" : "slow");
60             mBaseDir = new File(dir, Long.toString(System.currentTimeMillis()));
61             mQuick = quick;
62             mBuffer = quick ? new byte[1024*1024] : new byte[1024];
63         }
64 
65         @Override
doInBackground(Void... params)66         protected Void doInBackground(Void... params) {
67             long num = 0;
68             while (!isCancelled()) {
69                 long dir1num = num/100;
70                 long dir2num = num%100;
71                 File dir = new File(mBaseDir, Long.toString(dir1num));
72                 File file = new File(dir, Long.toString(dir2num));
73                 FileOutputStream fos = null;
74                 try {
75                     dir.mkdirs();
76                     fos = new FileOutputStream(file, false);
77                     fos.write(mBuffer);
78                 } catch (IOException e) {
79                     Log.w("CacheAbuser", "Write failed to " + file + ": " + e);
80                     try {
81                         Thread.sleep(5*1000);
82                     } catch (InterruptedException e1) {
83                     }
84                 } finally {
85                     try {
86                         if (fos != null) {
87                             fos.close();
88                         }
89                     } catch (IOException e) {
90                     }
91                 }
92                 num++;
93             }
94             return null;
95         }
96     }
97 
98     @Override
onCreate(Bundle icicle)99     public void onCreate(Bundle icicle) {
100         super.onCreate(icicle);
101 
102         setContentView(R.layout.cache_abuser);
103 
104         mStartInternalAbuse = (Button) findViewById(R.id.start_internal_abuse);
105         mStartInternalAbuse.setOnClickListener(new View.OnClickListener() {
106             public void onClick(View v) {
107                 if (mInternalAbuseTask == null) {
108                     mInternalAbuseTask = new AbuseTask(getCacheDir(), true);
109                     mInternalAbuseTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
110                     updateButtonState();
111                 }
112             }
113         });
114 
115         mStartSlowInternalAbuse = (Button) findViewById(R.id.start_slow_internal_abuse);
116         mStartSlowInternalAbuse.setOnClickListener(new View.OnClickListener() {
117             public void onClick(View v) {
118                 if (mInternalAbuseTask == null) {
119                     mInternalAbuseTask = new AbuseTask(getCacheDir(), false);
120                     mInternalAbuseTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
121                     updateButtonState();
122                 }
123             }
124         });
125 
126         mStartExternalAbuse = (Button) findViewById(R.id.start_external_abuse);
127         mStartExternalAbuse.setOnClickListener(new View.OnClickListener() {
128             public void onClick(View v) {
129                 if (mExternalAbuseTask == null) {
130                     mExternalAbuseTask = new AbuseTask(getExternalCacheDir(), true);
131                     mExternalAbuseTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
132                     updateButtonState();
133                 }
134             }
135         });
136 
137         mStartSlowExternalAbuse = (Button) findViewById(R.id.start_slow_external_abuse);
138         mStartSlowExternalAbuse.setOnClickListener(new View.OnClickListener() {
139             public void onClick(View v) {
140                 if (mExternalAbuseTask == null) {
141                     mExternalAbuseTask = new AbuseTask(getExternalCacheDir(), false);
142                     mExternalAbuseTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
143                     updateButtonState();
144                 }
145             }
146         });
147 
148         mStopAbuse = (Button) findViewById(R.id.stop_abuse);
149         mStopAbuse.setOnClickListener(new View.OnClickListener() {
150             public void onClick(View v) {
151                 stopAbuse();
152             }
153         });
154 
155         updateButtonState();
156     }
157 
158     @Override
onStart()159     public void onStart() {
160         super.onStart();
161         updateButtonState();
162     }
163 
164     @Override
onStop()165     public void onStop() {
166         super.onStop();
167         stopAbuse();
168     }
169 
stopAbuse()170     void stopAbuse() {
171         if (mInternalAbuseTask != null) {
172             mInternalAbuseTask.cancel(false);
173             mInternalAbuseTask = null;
174         }
175         if (mExternalAbuseTask != null) {
176             mExternalAbuseTask.cancel(false);
177             mExternalAbuseTask = null;
178         }
179         updateButtonState();
180     }
181 
updateButtonState()182     void updateButtonState() {
183         mStartInternalAbuse.setEnabled(mInternalAbuseTask == null);
184         mStartSlowInternalAbuse.setEnabled(mInternalAbuseTask == null);
185         mStartExternalAbuse.setEnabled(mExternalAbuseTask == null);
186         mStartSlowExternalAbuse.setEnabled(mExternalAbuseTask == null);
187         mStopAbuse.setEnabled(mInternalAbuseTask != null
188                 || mExternalAbuseTask != null);
189     }
190 }
191