| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "remoting/base/util.h" |
| |
| #include <algorithm> |
| #include <string> |
| #include <string_view> |
| |
| #include "base/i18n/time_formatting.h" |
| #include "base/time/time.h" |
| #include "remoting/base/cpu_utils.h" |
| #include "third_party/webrtc/modules/desktop_capture/desktop_region.h" |
| |
| namespace remoting { |
| |
| // Do not write LOG messages in this routine since it is called from within |
| // our LOG message handler. Bad things will happen. |
| std::string GetTimestampString() { |
| return base::UnlocalizedTimeFormatWithPattern(base::Time::NowFromSystemTime(), |
| "MMdd/HHmmss:"); |
| } |
| |
| int RoundToTwosMultiple(int x) { |
| return x & (~1); |
| } |
| |
| webrtc::DesktopRect AlignRect(const webrtc::DesktopRect& rect) { |
| int x = RoundToTwosMultiple(rect.left()); |
| int y = RoundToTwosMultiple(rect.top()); |
| int right = RoundToTwosMultiple(rect.right() + 1); |
| int bottom = RoundToTwosMultiple(rect.bottom() + 1); |
| return webrtc::DesktopRect::MakeLTRB(x, y, right, bottom); |
| } |
| |
| webrtc::DesktopRect GetRowAlignedRect(const webrtc::DesktopRect rect, |
| int max_right) { |
| static const int align = GetSimdMemoryAlignment(); |
| static const int align_mask = ~(align - 1); |
| int new_left = (rect.left() & align_mask); |
| int new_right = std::min((rect.right() + align - 1) & align_mask, max_right); |
| return webrtc::DesktopRect::MakeLTRB(new_left, rect.top(), new_right, |
| rect.bottom()); |
| } |
| |
| std::string ReplaceLfByCrLf(std::string_view in) { |
| std::string out; |
| out.reserve(2 * in.size()); |
| for (char c : in) { |
| if (c == '\n') { |
| out.push_back('\r'); |
| } |
| out.push_back(c); |
| } |
| return out; |
| } |
| |
| std::string ReplaceCrLfByLf(std::string_view in) { |
| std::string out; |
| out.reserve(in.size()); |
| for (size_t i = 0; i < in.size();) { |
| if (i + 1 < in.size() && in[i] == '\r' && in[i + 1] == '\n') { |
| out.push_back('\n'); |
| i += 2; |
| } else { |
| out.push_back(in[i]); |
| ++i; |
| } |
| } |
| return out; |
| } |
| |
| bool DoesRectContain(const webrtc::DesktopRect& a, |
| const webrtc::DesktopRect& b) { |
| webrtc::DesktopRect intersection(a); |
| intersection.IntersectWith(b); |
| return intersection.equals(b); |
| } |
| |
| } // namespace remoting |