This issue can be reproduced in the latest Electron version on a Retina device. Essentially, only the top left fourth of the screen's pixels are returned on retina screens.

I presume this happens because beginFrameSubscription, even on mainWindow, does not return retina pixel data ever.

Issue arrises after: https://github.com/electron/libchromiumcontent/pull/227

Issue description: https://github.com/electron/electron/issues/5665#issuecomment-245813684

atom/browser/api/frame_subscriber.cc
const gfx::Rect& damage_rect,
                                       const SkBitmap& bitmap,
                                       content::ReadbackResponse response) {
  if (response != content::ReadbackResponse::READBACK_SUCCESS)
    return;
  v8::Locker locker(isolate_);
  v8::HandleScope handle_scope(isolate_);
  size_t rgb_arr_size = bitmap.width() * bitmap.height() *
    bitmap.bytesPerPixel();
  v8::MaybeLocal<v8::Object> buffer = node::Buffer::New(isolate_, rgb_arr_size);
  if (buffer.IsEmpty())
    return;
  bitmap.copyPixelsTo(
    reinterpret_cast<uint8_t*>(node::Buffer::Data(buffer.ToLocalChecked())),
    rgb_arr_size);
  v8::Local<v8::Value> damage =
      mate::Converter<gfx::Rect>::ToV8(isolate_, damage_rect);
  callback_.Run(buffer.ToLocalChecked(), damage);
}
}  
}