test_file_util_mac.cc revision c7f5f8508d98d5952d42ed7648c2a8f30a4da156
1// Copyright (c) 2008 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/test/test_file_util.h"
6
7#include <sys/mman.h>
8#include <errno.h>
9#include "base/logging.h"
10#include "base/file_util.h"
11
12namespace file_util {
13
14bool EvictFileFromSystemCache(const FilePath& file) {
15  // There aren't any really direct ways to purge a file from the UBC.  From
16  // talking with Amit Singh, the safest is to mmap the file with MAP_FILE (the
17  // default) + MAP_SHARED, then do an msync to invalidate the memory.  The next
18  // open should then have to load the file from disk.
19
20  file_util::MemoryMappedFile mapped_file;
21  if (!mapped_file.Initialize(file)) {
22    DLOG(WARNING) << "failed to memory map " << file.value();
23    return false;
24  }
25
26  if (msync(const_cast<uint8*>(mapped_file.data()), mapped_file.length(),
27            MS_INVALIDATE) != 0) {
28    DLOG(WARNING) << "failed to invalidate memory map of " << file.value()
29        << ", errno: " << errno;
30    return false;
31  }
32
33  return true;
34}
35
36}  // namespace file_util
37