139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania/* 239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * Copyright (C) 2009 The Android Open Source Project 339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * All rights reserved. 439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * 539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * Redistribution and use in source and binary forms, with or without 639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * modification, are permitted provided that the following conditions 739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * are met: 839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * * Redistributions of source code must retain the above copyright 939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * notice, this list of conditions and the following disclaimer. 1039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * * Redistributions in binary form must reproduce the above copyright 1139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * notice, this list of conditions and the following disclaimer in 1239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * the documentation and/or other materials provided with the 1339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * distribution. 1439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * 1539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 1839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 1939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 2039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 2139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 2239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 2339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 2439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 2539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania * SUCH DAMAGE. 2739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania */ 2839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 2939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania#include "testcase.h" 3039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania#include <hardware_legacy/power.h> // wake lock 3139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania#include <sys/types.h> 3239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania#include <sys/wait.h> 3339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania#include <unistd.h> 3439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania#include <linux/fadvise.h> 3539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 3639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catanianamespace { 3739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Cataniaconst bool kVerbose = false; 3839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania} 3939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 4039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catanianamespace android_test { 4139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 4239c016f875b793296a121f41de5775b88f6fa1c9Nicolas CataniaTestCase::TestCase(const char *appName) 4339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania : mTestBody(NULL), mAppName(appName), mDataSize(1000 * 1000), 44e1b480b11c19f014a2a6ceddd28883275a4ba0e3Jeff Sharkey mChunkSize(mDataSize), mTreeDepth(8), mIter(20), mNproc(1), 4539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mType(UNKNOWN_TEST), mDump(false), mCpuScaling(false), 4639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mSync(NO_SYNC), mFadvice(POSIX_FADV_NORMAL), mTruncateToSize(false), 4739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mTestTimer(NULL) 4839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania{ 4939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania // Make sure the cpu and phone are fully awake. The 5039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania // FULL_WAKE_LOCK was used by java apps and don't do 5139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania // anything. Also the partial wake lock is a nop if the phone 5239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania // is plugged in via USB. 5339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania acquire_wake_lock(PARTIAL_WAKE_LOCK, mAppName); 5439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mPid = getpid(); 5539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania setNewFairSleepers(true); 5639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania setNormalizedSleepers(true); 5739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if (pipe(mIpc) < 0) 5839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania { 5939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania fprintf(stderr, "pipe failed\n"); 6039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania exit(1); 6139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania } 6239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if (pipe(mIpc + 2) < 0) 6339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania { 6439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania fprintf(stderr, "pipe failed\n"); 6539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania exit(1); 6639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania } 6739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania} 6839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 6939c016f875b793296a121f41de5775b88f6fa1c9Nicolas CataniaTestCase::~TestCase() 7039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania{ 7139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania release_wake_lock(mAppName); 7239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania for (int i = 0; i < 4; ++i) close(mIpc[i]); 7339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania delete mTestTimer; 7439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania delete mOpenTimer; 7539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania} 7639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 7739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 7839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Cataniabool TestCase::runTest() 7939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania{ 8039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if (UNKNOWN_TEST == mType) 8139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania { 8239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania fprintf(stderr, "No test set."); 8339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania return false; 8439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania } 8539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania for (size_t p = 0; p < mNproc; ++p) 8639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania { 8739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania pid_t childpid = android::forkOrExit(); 8839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 8939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if (0 == childpid) { // I am a child, run the test. 9039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mPid = getpid(); 9139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania close(mIpc[READ_FROM_CHILD]); 9239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania close(mIpc[WRITE_TO_CHILD]); 9339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 9439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if (kVerbose) printf("Child pid: %d\n", mPid); 9539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if (!mTestBody(this)) { 9639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania printf("Test failed\n"); 9739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania } 9839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania char buffer[32000] = {0,}; 9939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania char *str = buffer; 10039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania size_t size_left = sizeof(buffer); 10139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 10239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania testTimer()->sprint(&str, &size_left); 10339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if(openTimer()->used()) openTimer()->sprint(&str, &size_left); 10439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if(readTimer()->used()) readTimer()->sprint(&str, &size_left); 10539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if(writeTimer()->used()) writeTimer()->sprint(&str, &size_left); 10639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if(syncTimer()->used()) syncTimer()->sprint(&str, &size_left); 10739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if(truncateTimer()->used()) truncateTimer()->sprint(&str, &size_left); 108e1b480b11c19f014a2a6ceddd28883275a4ba0e3Jeff Sharkey if(traverseTimer()->used()) traverseTimer()->sprint(&str, &size_left); 10939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 11039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania write(mIpc[TestCase::WRITE_TO_PARENT], buffer, str - buffer); 11139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 11239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 11339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania close(mIpc[WRITE_TO_PARENT]); 11439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania close(mIpc[READ_FROM_PARENT]); 11539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania exit(EXIT_SUCCESS); 11639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania } 11739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania } 11839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania // I am the parent process 11939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania close(mIpc[WRITE_TO_PARENT]); 12039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania close(mIpc[READ_FROM_PARENT]); 12139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 12239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania // Block until all the children have reported for 12339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania // duty. Unblock them so they start the work. 12439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if (!android::waitForChildrenAndSignal(mNproc, mIpc[READ_FROM_CHILD], mIpc[WRITE_TO_CHILD])) 12539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania { 12639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania exit(1); 12739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania } 12839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 12939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania // Process the output of each child. 13039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania // TODO: handle EINTR 13139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania char buffer[32000] = {0,}; 13239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania while(read(mIpc[READ_FROM_CHILD], buffer, sizeof(buffer)) != 0) 13339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania { 13439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania printf("%s", buffer); 13539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania fflush(stdout); 13639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania memset(buffer, 0, sizeof(buffer)); 13739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania } 13839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania // Parent is waiting for children to exit. 13939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania android::waitForChildrenOrExit(mNproc); 14039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania return true; 14139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania} 14239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 14339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Cataniavoid TestCase::setIter(size_t iter) 14439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania{ 14539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mIter = iter; 14639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania} 14739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 14839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Cataniavoid TestCase::createTimers() 14939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania{ 15039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania char total_time[80]; 15139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 15239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania snprintf(total_time, sizeof(total_time), "%s_total", mName); 15339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mTestTimer = new StopWatch(total_time, 1); 15439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mTestTimer->setDataSize(dataSize()); 15539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 15639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mOpenTimer = new StopWatch("open", iter() * kReadWriteFactor); 15739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 15839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mReadTimer = new StopWatch("read", iter() * dataSize() / chunkSize() * kReadWriteFactor); 15939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mReadTimer->setDataSize(dataSize()); 16039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 16139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mWriteTimer = new StopWatch("write", iter() * dataSize() / chunkSize()); 16239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mWriteTimer->setDataSize(dataSize()); 16339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 16439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mSyncTimer = new StopWatch("sync", iter()); 16539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 16639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mTruncateTimer = new StopWatch("truncate", iter()); 167e1b480b11c19f014a2a6ceddd28883275a4ba0e3Jeff Sharkey 168e1b480b11c19f014a2a6ceddd28883275a4ba0e3Jeff Sharkey mTraverseTimer = new StopWatch("traversal", iter()); 16939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania} 17039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 17139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Cataniabool TestCase::setTypeFromName(const char *test_name) 17239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania{ 17339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania strcpy(mName, test_name); 17439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if (strcmp(mName, "write") == 0) mType = WRITE; 17539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if (strcmp(mName, "read") == 0) mType = READ; 17639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if (strcmp(mName, "read_write") == 0) mType = READ_WRITE; 17739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if (strcmp(mName, "open_create") == 0) mType = OPEN_CREATE; 178e1b480b11c19f014a2a6ceddd28883275a4ba0e3Jeff Sharkey if (strcmp(mName, "traverse") == 0) mType = TRAVERSE; 17939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 18039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania return UNKNOWN_TEST != mType; 18139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania} 18239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 18339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Cataniavoid TestCase::setSync(Sync s) 18439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania{ 18539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mSync = s; 18639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania} 18739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 18839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Cataniaconst char *TestCase::syncAsStr() const 18939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania{ 19039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania return mSync == NO_SYNC ? "disabled" : (mSync == FSYNC ? "fsync" : "sync"); 19139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania} 19239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 19339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Cataniavoid TestCase::setFadvise(const char *advice) 19439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania{ 19539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mFadvice = POSIX_FADV_NORMAL; 19639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania if (strcmp(advice, "sequential") == 0) 19739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania { 19839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mFadvice = POSIX_FADV_SEQUENTIAL; 19939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania } 20039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania else if (strcmp(advice, "random") == 0) 20139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania { 20239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mFadvice = POSIX_FADV_RANDOM; 20339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania } 20439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania else if (strcmp(advice, "noreuse") == 0) 20539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania { 20639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mFadvice = POSIX_FADV_NOREUSE; 20739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania } 20839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania else if (strcmp(advice, "willneed") == 0) 20939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania { 21039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mFadvice = POSIX_FADV_WILLNEED; 21139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania } 21239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania else if (strcmp(advice, "dontneed") == 0) 21339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania { 21439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania mFadvice = POSIX_FADV_DONTNEED; 21539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania } 21639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania} 21739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 21839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Cataniaconst char *TestCase::fadviseAsStr() const 21939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania{ 22039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania switch (mFadvice) { 22139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania case POSIX_FADV_NORMAL: return "fadv_normal"; 22239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania case POSIX_FADV_SEQUENTIAL: return "fadv_sequential"; 22339c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania case POSIX_FADV_RANDOM: return "fadv_random"; 22439c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania case POSIX_FADV_NOREUSE: return "fadv_noreuse"; 22539c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania case POSIX_FADV_WILLNEED: return "fadv_willneed"; 22639c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania case POSIX_FADV_DONTNEED: return "fadv_dontneed"; 22739c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania default: return "fadvice_unknown"; 22839c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania } 22939c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania} 23039c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 23139c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania 23239c016f875b793296a121f41de5775b88f6fa1c9Nicolas Catania} // namespace android_test 233