mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-16 23:05:42 +00:00
2416d881e2
There are no code changes, only #include changes. It was a fairly mechanical process: Search for all "AUTO_PROFILER_LABEL", and in each file, if only labels are used, convert "GeckoProfiler.h" into "ProfilerLabels.h" (or just add that last one where needed). In some files, there were also some marker calls but no other profiler-related calls, in these cases "GeckoProfiler.h" was replaced with both "ProfilerLabels.h" and "ProfilerMarkers.h", which still helps in reducing the use of the all-encompassing "GeckoProfiler.h". Differential Revision: https://phabricator.services.mozilla.com/D104588
67 lines
2.0 KiB
C++
67 lines
2.0 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "FileUtilsWin.h"
|
|
|
|
#include <windows.h>
|
|
#include <psapi.h>
|
|
|
|
#include "mozilla/ProfilerLabels.h"
|
|
#include "mozilla/Unused.h"
|
|
#include "nsWindowsHelpers.h"
|
|
|
|
namespace {
|
|
|
|
// Scoped type used by HandleToFilename
|
|
struct ScopedMappedViewTraits {
|
|
typedef void* type;
|
|
static void* empty() { return nullptr; }
|
|
static void release(void* aPtr) {
|
|
if (aPtr) {
|
|
mozilla::Unused << UnmapViewOfFile(aPtr);
|
|
}
|
|
}
|
|
};
|
|
typedef mozilla::Scoped<ScopedMappedViewTraits> ScopedMappedView;
|
|
|
|
} // namespace
|
|
|
|
namespace mozilla {
|
|
|
|
bool HandleToFilename(HANDLE aHandle, const LARGE_INTEGER& aOffset,
|
|
nsAString& aFilename) {
|
|
AUTO_PROFILER_LABEL("HandletoFilename", OTHER);
|
|
|
|
aFilename.Truncate();
|
|
// This implementation is nice because it uses fully documented APIs that
|
|
// are available on all Windows versions that we support.
|
|
nsAutoHandle fileMapping(
|
|
CreateFileMapping(aHandle, nullptr, PAGE_READONLY, 0, 1, nullptr));
|
|
if (!fileMapping) {
|
|
return false;
|
|
}
|
|
ScopedMappedView view(MapViewOfFile(fileMapping, FILE_MAP_READ,
|
|
aOffset.HighPart, aOffset.LowPart, 1));
|
|
if (!view) {
|
|
return false;
|
|
}
|
|
nsAutoString mappedFilename;
|
|
DWORD len = 0;
|
|
SetLastError(ERROR_SUCCESS);
|
|
do {
|
|
mappedFilename.SetLength(mappedFilename.Length() + MAX_PATH);
|
|
len = GetMappedFileNameW(GetCurrentProcess(), view, mappedFilename.get(),
|
|
mappedFilename.Length());
|
|
} while (!len && GetLastError() == ERROR_INSUFFICIENT_BUFFER);
|
|
if (!len) {
|
|
return false;
|
|
}
|
|
mappedFilename.Truncate(len);
|
|
return NtPathToDosPath(mappedFilename, aFilename);
|
|
}
|
|
|
|
} // namespace mozilla
|