static bool check_rect(GrDrawContext* dc, const SkIRect& rect, uint32_t expectedValue, uint32_t* actualValue, int* failX, int* failY) { GrRenderTarget* rt = dc->accessRenderTarget(); int w = rect.width(); int h = rect.height(); SkAutoTDeleteArray<uint32_t> pixels(new uint32_t[w * h]); memset(pixels.get(), ~expectedValue, sizeof(uint32_t) * w * h); rt->readPixels(rect.fLeft, rect.fTop, w, h, kRGBA_8888_GrPixelConfig, pixels.get()); for (int y = 0; y < h; ++y) { for (int x = 0; x < w; ++x) { uint32_t pixel = pixels.get()[y * w + x]; if (pixel != expectedValue) { *actualValue = pixel; *failX = x + rect.fLeft; *failY = y + rect.fTop; return false; } } } return true; }