From 425016403c4972ee98cb853890afa8259089c823 Mon Sep 17 00:00:00 2001 From: zzyyyl Date: Thu, 1 Sep 2022 16:35:36 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E5=99=A8=E8=A1=8C=E5=B0=BE=E5=8F=98=E5=8C=96?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/1719 --- src/MeoAssistant/Controller.cpp | 4 +++- src/MeoAssistant/Controller.h | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index e8ebee4534..ac2aefffe0 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -741,7 +741,8 @@ bool asst::Controller::screencap(const std::string& cmd, const DecodeFunc& decod else { Log.info("data is not empty, but image is empty"); - if (m_adb.screencap_end_of_line == AdbProperty::ScreencapEndOfLine::UnknownYet) { + if (m_adb.screencap_end_of_line == AdbProperty::ScreencapEndOfLine::UnknownYet || + m_adb.screencap_end_of_line == AdbProperty::ScreencapEndOfLine::LF) { Log.info("try to cvt lf"); convert_lf(data); @@ -754,6 +755,7 @@ bool asst::Controller::screencap(const std::string& cmd, const DecodeFunc& decod Log.error("convert lf and retry decode failed!"); } } + m_adb.screencap_end_of_line = AdbProperty::ScreencapEndOfLine::UnknownYet; return false; } } diff --git a/src/MeoAssistant/Controller.h b/src/MeoAssistant/Controller.h index a5884bf77f..e1315df259 100644 --- a/src/MeoAssistant/Controller.h +++ b/src/MeoAssistant/Controller.h @@ -91,7 +91,8 @@ namespace asst void random_delay() const; void clear_info() noexcept; - // 转换data中所有的crlf为lf:有些模拟器自带的adb,exec-out输出的\n,会被替换成\r\n,导致解码错误,所以这里转一下回来(点名批评mumu) + // 转换 data 中所有的 crlf 为 lf:有些模拟器自带的 adb,exec-out 输出的 lf 会被替换成 crlf, + // 导致解码错误,所以这里转一下回来(点名批评 mumu 和雷电) static void convert_lf(std::vector& data); bool* m_exit_flag = nullptr; From e20ffff2af400010438c3467168cb58c96c3fe8c Mon Sep 17 00:00:00 2001 From: zzyyyl Date: Thu, 1 Sep 2022 16:32:13 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E7=94=A8=E6=AF=AB=E7=A7=92?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=88=AA=E5=9B=BE=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/Controller.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index ac2aefffe0..88cf9b070d 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -648,54 +648,55 @@ bool asst::Controller::screencap() switch (m_adb.screencap_method) { case AdbProperty::ScreencapMethod::UnknownYet: { + using namespace std::chrono; Log.info("Try to find the fastest way to screencap"); m_inited = false; - auto min_cost = std::chrono::nanoseconds(LLONG_MAX); + auto min_cost = milliseconds(LLONG_MAX); - auto start_time = std::chrono::high_resolution_clock::now(); + auto start_time = high_resolution_clock::now(); if (m_support_socket && m_server_started && screencap(m_adb.screencap_raw_by_nc, decode_raw, true)) { - auto duration = std::chrono::high_resolution_clock::now() - start_time; + auto duration = duration_cast(high_resolution_clock::now() - start_time); if (duration < min_cost) { m_adb.screencap_method = AdbProperty::ScreencapMethod::RawByNc; m_inited = true; min_cost = duration; } - Log.info("RawByNc cost", duration.count(), "ns"); + Log.info("RawByNc cost", duration.count(), "ms"); } else { Log.info("RawByNc is not supported"); } clear_lf_info(); - start_time = std::chrono::high_resolution_clock::now(); + start_time = high_resolution_clock::now(); if (screencap(m_adb.screencap_raw_with_gzip, decode_raw_with_gzip)) { - auto duration = std::chrono::high_resolution_clock::now() - start_time; + auto duration = duration_cast(high_resolution_clock::now() - start_time); if (duration < min_cost) { m_adb.screencap_method = AdbProperty::ScreencapMethod::RawWithGzip; m_inited = true; min_cost = duration; } - Log.info("RawWithGzip cost", duration.count(), "ns"); + Log.info("RawWithGzip cost", duration.count(), "ms"); } else { Log.info("RawWithGzip is not supported"); } clear_lf_info(); - start_time = std::chrono::high_resolution_clock::now(); + start_time = high_resolution_clock::now(); if (screencap(m_adb.screencap_encode, decode_encode)) { - auto duration = std::chrono::high_resolution_clock::now() - start_time; + auto duration = duration_cast(high_resolution_clock::now() - start_time); if (duration < min_cost) { m_adb.screencap_method = AdbProperty::ScreencapMethod::Encode; m_inited = true; min_cost = duration; } - Log.info("Encode cost", duration.count(), "ns"); + Log.info("Encode cost", duration.count(), "ms"); } else { Log.info("Encode is not supported"); } - Log.info("The fastest way is", static_cast(m_adb.screencap_method), ", cost:", min_cost.count(), "ns"); + Log.info("The fastest way is", static_cast(m_adb.screencap_method), ", cost:", min_cost.count(), "ms"); clear_lf_info(); return m_inited; } break;