| Index: skia/ext/bitmap_platform_device_win.cc
|
| ===================================================================
|
| --- skia/ext/bitmap_platform_device_win.cc (revision 109956)
|
| +++ skia/ext/bitmap_platform_device_win.cc (working copy)
|
| @@ -7,64 +7,12 @@
|
|
|
| #include "skia/ext/bitmap_platform_device_win.h"
|
|
|
| -#include "base/logging.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/process_util.h"
|
| #include "skia/ext/bitmap_platform_device_data.h"
|
| #include "third_party/skia/include/core/SkMatrix.h"
|
| #include "third_party/skia/include/core/SkRefCnt.h"
|
| #include "third_party/skia/include/core/SkRegion.h"
|
| #include "third_party/skia/include/core/SkUtils.h"
|
|
|
| -namespace {
|
| -// Crashes the process. This is called when a bitmap allocation fails, and this
|
| -// function tries to determine why it might have failed, and crash on different
|
| -// lines. This allows us to see in crash dumps the most likely reason for the
|
| -// failure. It takes the size of the bitmap we were trying to allocate as its
|
| -// arguments so we can check that as well.
|
| -// Bitmap allocation failures are occuring under conditions outside of GDI and
|
| -// address space pressure, so we only crash when resources are not low.
|
| -void CrashForBitmapAllocationFailure(int w, int h) {
|
| -
|
| - DWORD last_error = GetLastError();
|
| -
|
| - // The maximum number of GDI objects per process is 10K. If we're very close
|
| - // to that, it's probably the problem.
|
| - const int kLotsOfGDIObjs = 9990;
|
| - if (GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS) > kLotsOfGDIObjs)
|
| - return;
|
| -
|
| - // If the bitmap is ginormous, then we probably can't allocate it.
|
| - // We use 64M pixels.
|
| - const int64 kGinormousBitmapPxl = 64000000;
|
| - if (static_cast<int64>(w) * static_cast<int64>(h) > kGinormousBitmapPxl)
|
| - return;
|
| -
|
| - // If we're using a crazy amount of virtual address space, then maybe there
|
| - // isn't enough for our bitmap.
|
| - const int64 kLotsOfMem = 1500000000; // 1.5GB.
|
| - scoped_ptr<base::ProcessMetrics> process_metrics(
|
| - base::ProcessMetrics::CreateProcessMetrics(GetCurrentProcess()));
|
| - if (process_metrics->GetPagefileUsage() > kLotsOfMem)
|
| - return;
|
| -
|
| - LPVOID lpMsgBuf = NULL;
|
| - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
| - FORMAT_MESSAGE_FROM_SYSTEM |
|
| - FORMAT_MESSAGE_IGNORE_INSERTS,
|
| - NULL,
|
| - last_error,
|
| - 0,
|
| - reinterpret_cast<LPTSTR>(&lpMsgBuf),
|
| - 0,
|
| - NULL);
|
| -
|
| - CHECK(NO_ERROR == last_error);
|
| - LocalFree(lpMsgBuf);
|
| -}
|
| -
|
| -}
|
| -
|
| namespace skia {
|
|
|
| BitmapPlatformDevice::BitmapPlatformDeviceData::BitmapPlatformDeviceData(
|
| @@ -169,16 +117,11 @@
|
| hdr.biClrImportant = 0;
|
|
|
| void* data = NULL;
|
| -
|
| - // Force the last error to success so that we can accurately track failures
|
| - // in CrashForBitmapAllocationFailure.
|
| - SetLastError(ERROR_SUCCESS);
|
| HBITMAP hbitmap = CreateDIBSection(screen_dc,
|
| reinterpret_cast<BITMAPINFO*>(&hdr), 0,
|
| &data,
|
| shared_section, 0);
|
| if (!hbitmap) {
|
| - CrashForBitmapAllocationFailure(width, height);
|
| return NULL;
|
| }
|
|
|
|
|