Do not crop DesktopFrame if the size won't change

CreateCroppedDesktopFrame() does not need to create a CroppedDesktopFrame if the
size won't change.

Bug: webrtc:8039
Change-Id: Ie6789a4b473b69bced94c4a25a68f1da6bb3510e
Reviewed-on: https://chromium-review.googlesource.com/587808
Commit-Queue: Zijie He <zijiehe@chromium.org>
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#19163}
diff --git a/webrtc/modules/desktop_capture/cropped_desktop_frame.cc b/webrtc/modules/desktop_capture/cropped_desktop_frame.cc
index 9d4d123..5aa1449 100644
--- a/webrtc/modules/desktop_capture/cropped_desktop_frame.cc
+++ b/webrtc/modules/desktop_capture/cropped_desktop_frame.cc
@@ -12,6 +12,7 @@
 
 #include "webrtc/modules/desktop_capture/cropped_desktop_frame.h"
 
+#include "webrtc/rtc_base/checks.h"
 #include "webrtc/rtc_base/constructormagic.h"
 
 namespace webrtc {
@@ -31,8 +32,15 @@
 std::unique_ptr<DesktopFrame> CreateCroppedDesktopFrame(
     std::unique_ptr<DesktopFrame> frame,
     const DesktopRect& rect) {
-  if (!DesktopRect::MakeSize(frame->size()).ContainsRect(rect))
+  RTC_DCHECK(frame);
+
+  if (!DesktopRect::MakeSize(frame->size()).ContainsRect(rect)) {
     return nullptr;
+  }
+
+  if (frame->size().equals(rect.size())) {
+    return frame;
+  }
 
   return std::unique_ptr<DesktopFrame>(
       new CroppedDesktopFrame(std::move(frame), rect));
diff --git a/webrtc/modules/desktop_capture/cropped_desktop_frame.h b/webrtc/modules/desktop_capture/cropped_desktop_frame.h
index 42ae587..107fe7f 100644
--- a/webrtc/modules/desktop_capture/cropped_desktop_frame.h
+++ b/webrtc/modules/desktop_capture/cropped_desktop_frame.h
@@ -15,6 +15,10 @@
 
 namespace webrtc {
 
+// Creates a DesktopFrame to contain only the area of |rect| in the original
+// |frame|.
+// |frame| should not be nullptr. |rect| is in |frame| coordinate, i.e.
+// |frame|->top_left() does not impact the area of |rect|.
 // Returns nullptr frame if |rect| is not contained by the bounds of |frame|.
 std::unique_ptr<DesktopFrame> CreateCroppedDesktopFrame(
     std::unique_ptr<DesktopFrame> frame,