MemoryAccessTask.java revision 9dbde7b09f2366d2a239b1a4c234d5cf2de51739
19dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel/* 29dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel * Copyright (C) 2015 The Android Open Source Project 39dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel * 49dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel * Licensed under the Apache License, Version 2.0 (the "License"); 59dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel * you may not use this file except in compliance with the License. 69dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel * You may obtain a copy of the License at 79dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel * 89dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel * http://www.apache.org/licenses/LICENSE-2.0 99dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel * 109dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel * Unless required by applicable law or agreed to in writing, software 119dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel * distributed under the License is distributed on an "AS IS" BASIS, 129dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel * See the License for the specific language governing permissions and 149dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel * limitations under the License. 159dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel */ 169dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmelpackage android.surfacecomposition; 179dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel 189dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmelimport android.util.Log; 199dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel 209dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel/** 219dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel * This task will simulate CPU activity by consuming memory bandwidth from the system. 229dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel * Note: On most system the CPU and GPU will share the same memory. 239dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel */ 249dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmelpublic class MemoryAccessTask { 259dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel private final static String TAG = "MemoryAccessTask"; 269dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel private final static int BUFFER_SIZE = 32 * 1024 * 1024; 279dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel private final static int BUFFER_STEP = 256; 289dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel private boolean mStopRequested; 299dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel private WorkThread mThread; 309dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel private final Object mLock = new Object(); 319dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel 329dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel public class WorkThread extends Thread { 339dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel public void run() { 349dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel byte[] memory = new byte[BUFFER_SIZE]; 359dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel while (true) { 369dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel synchronized (mLock) { 379dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel if (mStopRequested) { 389dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel break; 399dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel } 409dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel } 419dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel long result = 0; 429dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel for (int index = 0; index < BUFFER_SIZE; index += BUFFER_STEP) { 439dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel result += ++memory[index]; 449dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel } 459dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel Log.v(TAG, "Processing...:" + result); 469dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel } 479dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel } 489dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel } 499dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel 509dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel public void start() { 519dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel if (mThread != null) { 529dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel throw new RuntimeException("Work thread is already started"); 539dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel } 549dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel mStopRequested = false; 559dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel mThread = new WorkThread(); 569dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel mThread.start(); 579dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel } 589dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel 599dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel public void stop() { 609dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel if (mThread != null) { 619dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel synchronized (mLock) { 629dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel mStopRequested = true; 639dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel } 649dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel try { 659dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel mThread.join(); 669dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel } catch (InterruptedException e) { 679dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel e.printStackTrace(); 689dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel } 699dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel } 709dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel } 719dbde7b09f2366d2a239b1a4c234d5cf2de51739Yury Khmel} 72