21.10.12. chromium issue_1252242 패치 도전3(성공)

Nayeon Kim·2021년 10월 12일
2

chromium

목록 보기
10/10

그동안 브라우저 테스트를 실행하고 디버깅하는 데 애를 먹었는데, 테스트 실행 명령어 자체부터가 잘못됐었던 것 같다.

fail나는 이유를 살펴보니,

Dry run: Failed builds:
luci.chromium.try/cast_shell_linux JOB_FAILED
https://cr-buildbucket.appspot.com/build/8834565178147998689

1 Test Suite(s) failed.

**content_browsertests** failed because of:
- SyntheticInputTest.DestroyWidgetWithOngoingGesture
- SyntheticInputTest.SmoothScrollWheel

이러한 에러 메시지가 떴다. 에러 메시지가 중요한 이유. 여기에는 browser test에서 오류가 나는 부분들을 알려주고 있는데 14000개가 넘는 브라우저 테스트를 모두 돌릴 필요가 없고, 오류가 난 해당 부분들만 filter를 걸어서 돌리면 메모리와 시간을 절약할 수 있다.

일단 content_browsertests의 경우에는 browsertest와는 별개로 생각해야한다.
처음에는 content_browsertests 역시 browsertests 내의 일부라고 생각해서 browsertests ninja 과정을 거치고 필터로 ContentBrowsertests를 걸면 될 것 같았는데,
autoninja -C out/Default content_browsertests 를 따로 진행한 후에
out\'사용하고 있는 디렉토리'\content_browsertests --gtest_filter='테스트 이름'
를 하면 정상적으로 content_browsertests 내에 있는 테스트들을 진행할 수 있다.

c:\chromium\src>autoninja -C out/Default content_browsertests
"C:\src\depot_tools\ninja.exe" -C out/Default content_browsertests -j 10
ninja: Entering directory `out/Default'
[400/400] LINK content_browsertests.exe content_browsertests.exe.pdb

c:\chromium\src>out\Default\content_browsertests --gtest_filter=SyntheticInputTest.DestroyWidgetWithOngoingGesture

수정하기 전의 기존 코드에서는 정상적으로 테스트 성공.

c:\chromium\src>out\Default\content_browsertests --gtest_filter=SyntheticInputTest.DestroyWidgetWithOngoingGesture
IMPORTANT DEBUGGING NOTE: each test is run inside its own process.
For debugging a test inside a debugger, use the
--gtest_filter=<your_test_name> flag along with either
--single-process-tests (to run the test in one launcher/browser process) or
--single-process (to do the above, and also run Chrome in single-process mode).
Using sharding settings from environment. This is shard 0/1
Using 1 parallel jobs.
Note: Google Test filter = SyntheticInputTest.DestroyWidgetWithOngoingGesture
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from SyntheticInputTest, where TypeParam =
[ RUN      ] SyntheticInputTest.DestroyWidgetWithOngoingGesture
[49604:32716:1005/102314.187:INFO:content_main_runner_impl.cc(1112)] Chrome is running in full browser mode.

DevTools listening on ws://127.0.0.1:3336/devtools/browser/f7e03051-8cd7-462a-a0ad-47b70f5cf18f
[49604:32716:1005/102314.421:ERROR:browser_test_utils.cc(879)] No committed entry.
[       OK ] SyntheticInputTest.DestroyWidgetWithOngoingGesture (1916 ms)
[----------] 1 test from SyntheticInputTest (1918 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (1925 ms total)
[  PASSED  ] 1 test.
[1/1] SyntheticInputTest.DestroyWidgetWithOngoingGesture (2394 ms)
SUCCESS: all tests passed.

c:\chromium\src>out\Default\content_browsertests --gtest_filter=SyntheticInputTest.SmoothScrollWheel
IMPORTANT DEBUGGING NOTE: each test is run inside its own process.
For debugging a test inside a debugger, use the
--gtest_filter=<your_test_name> flag along with either
--single-process-tests (to run the test in one launcher/browser process) or
--single-process (to do the above, and also run Chrome in single-process mode).
Using sharding settings from environment. This is shard 0/1
Using 1 parallel jobs.
Note: Google Test filter = SyntheticInputTest.SmoothScrollWheel
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from SyntheticInputTest, where TypeParam =
[ RUN      ] SyntheticInputTest.SmoothScrollWheel
[33808:5324:1005/102355.283:INFO:content_main_runner_impl.cc(1112)] Chrome is running in full browser mode.

DevTools listening on ws://127.0.0.1:12372/devtools/browser/29c0298e-6584-4dd6-bc0d-a684fc8a6c70
[33808:5324:1005/102355.510:ERROR:browser_test_utils.cc(879)] No committed entry.
[       OK ] SyntheticInputTest.SmoothScrollWheel (1872 ms)
[----------] 1 test from SyntheticInputTest (1874 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (1883 ms total)
[  PASSED  ] 1 test.
[1/1] SyntheticInputTest.SmoothScrollWheel (2348 ms)
SUCCESS: all tests passed.

수정 이후에는 해당 테스트가 fail나는 것을 확인할 수 있음.

c:\chromium\src>out\Default\content_browsertests --gtest_filter=SyntheticInputTest.DestroyWidgetWithOngoingGesture
IMPORTANT DEBUGGING NOTE: each test is run inside its own process.
For debugging a test inside a debugger, use the
--gtest_filter=<your_test_name> flag along with either
--single-process-tests (to run the test in one launcher/browser process) or
--single-process (to do the above, and also run Chrome in single-process mode).
Using sharding settings from environment. This is shard 0/1
Using 1 parallel jobs.
Note: Google Test filter = SyntheticInputTest.DestroyWidgetWithOngoingGesture
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from SyntheticInputTest, where TypeParam =
[ RUN      ] SyntheticInputTest.DestroyWidgetWithOngoingGesture
[18360:27936:1005/205355.041:INFO:content_main_runner_impl.cc(1112)] Chrome is running in full browser mode.

DevTools listening on ws://127.0.0.1:11674/devtools/browser/96f60260-6e48-42ca-862f-0fc5af6ba793
[18360:27936:1005/205355.711:ERROR:browser_test_utils.cc(879)] No committed entry.
[       OK ] SyntheticInputTest.DestroyWidgetWithOngoingGesture (2579 ms)
[----------] 1 test from SyntheticInputTest (8164 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (8169 ms total)
[  PASSED  ] 1 test.
[18360:27936:1005/205403.135:FATAL:sequenced_task_runner_handle.cc(26)] Check failed: current. Error: This caller requires a sequenced context (i.e. the current task needs to run from a SequencedTaskRunner). If you're in a test refer to //docs/threading_and_tasks_testing.md.
Backtrace:
        base::debug::CollectStackTrace [0x00007FFB23126F37+39] (c:\chromium\src\base\debug\stack_trace_win.cc:305)
        base::debug::StackTrace::StackTrace [0x00007FFB22E2D34D+77] (c:\chromium\src\base\debug\stack_trace.cc:200)
        base::debug::StackTrace::StackTrace [0x00007FFB22E2D2E5+37] (c:\chromium\src\base\debug\stack_trace.cc:197)
        logging::LogMessage::~LogMessage [0x00007FFB22E8104B+187] (c:\chromium\src\base\logging.cc:582)
        logging::LogMessage::~LogMessage [0x00007FFB22E8284C+44] (c:\chromium\src\base\logging.cc:576)
        logging::CheckError::~CheckError [0x00007FFB22DEB0BF+47] (c:\chromium\src\base\check.cc:107)
        base::SequencedTaskRunnerHandle::Get [0x00007FFB230C4F17+183] (c:\chromium\src\base\threading\sequenced_task_runner_handle.cc:30)
        base::internal::TimerBase::GetTaskRunner [0x00007FFB230E6180+80] (c:\chromium\src\base\timer\timer.cc:207)
        base::internal::TimerBase::ScheduleNewTask [0x00007FFB230E5DEE+350] (c:\chromium\src\base\timer\timer.cc:190)
        base::internal::TimerBase::Reset [0x00007FFB230E5B48+136] (c:\chromium\src\base\timer\timer.cc:159)
        base::internal::TimerBase::StartInternal [0x00007FFB230E59FB+107] (c:\chromium\src\base\timer\timer.cc:136)
        base::OneShotTimer::Start [0x00007FFB230E6910+112] (c:\chromium\src\base\timer\timer.cc:274)
        base::ImportantFileWriter::ScheduleWrite [0x00007FFB22E5AE47+391] (c:\chromium\src\base\files\important_file_writer.cc:349)
        JsonPrefStore::SchedulePendingLossyWrites [0x00007FFB25A8B3B6+54] (c:\chromium\src\components\prefs\json_pref_store.cc:349)
        JsonPrefStore::CommitPendingWrite [0x00007FFB25A8AC11+97] (c:\chromium\src\components\prefs\json_pref_store.cc:303)
        JsonPrefStore::~JsonPrefStore [0x00007FFB25A8C872+162] (c:\chromium\src\components\prefs\json_pref_store.cc:500)
        JsonPrefStore::~JsonPrefStore [0x00007FFB25A8D06C+44] (c:\chromium\src\components\prefs\json_pref_store.cc:497)
        base::RefCounted<PrefStore,base::DefaultRefCountedTraits<PrefStore> >::DeleteInternal<PrefStore> [0x00007FFB25A97A1D+45] (c:\chromium\src\base\memory\ref_counted.h:355)
        base::DefaultRefCountedTraits<PrefStore>::Destruct [0x00007FFB25A979E3+19] (c:\chromium\src\base\memory\ref_counted.h:318)
        base::RefCounted<PrefStore,base::DefaultRefCountedTraits<PrefStore> >::Release [0x00007FFB25A97833+51] (c:\chromium\src\base\memory\ref_counted.h:345)
        scoped_refptr<PrefStore>::Release [0x00007FFB25AB9487+23] (c:\chromium\src\base\memory\scoped_refptr.h:322)
        scoped_refptr<PrefStore>::~scoped_refptr [0x00007FFB25AB243A+42] (c:\chromium\src\base\memory\scoped_refptr.h:224)
        scoped_refptr<PrefStore>::reset [0x00007FFB25AC41C7+87] (c:\chromium\src\base\memory\scoped_refptr.h:253)
        scoped_refptr<PrefStore>::operator= [0x00007FFB25AC291D+29] (c:\chromium\src\base\memory\scoped_refptr.h:239)
        PrefValueStore::PrefStoreKeeper::~PrefStoreKeeper [0x00007FFB25AC28D1+97] (c:\chromium\src\components\prefs\pref_value_store.cc:21)
        PrefValueStore::~PrefValueStore [0x00007FFB25AC3127+119] (c:\chromium\src\components\prefs\pref_value_store.cc:77)
        PrefValueStore::~PrefValueStore [0x00007FFB25AC410C+44] (c:\chromium\src\components\prefs\pref_value_store.cc:77)
        std::__1::default_delete<PrefValueStore>::operator() [0x00007FFB25AB7571+49] (c:\chromium\src\buildtools\third_party\libc++\trunk\include\__memory\unique_ptr.h:55)
        std::__1::unique_ptr<PrefValueStore,std::__1::default_delete<PrefValueStore> >::reset [0x00007FFB25AB74F3+115] (c:\chromium\src\buildtools\third_party\libc++\trunk\include\__memory\unique_ptr.h:316)
        std::__1::unique_ptr<PrefValueStore,std::__1::default_delete<PrefValueStore> >::~unique_ptr [0x00007FFB25AB0937+23] (c:\chromium\src\buildtools\third_party\libc++\trunk\include\__memory\unique_ptr.h:269)
        PrefService::~PrefService [0x00007FFB25AB0AC8+312] (c:\chromium\src\components\prefs\pref_service.cc:129)
        PrefService::~PrefService [0x00007FFB25AB58DC+44] (c:\chromium\src\components\prefs\pref_service.cc:113)
        std::__1::default_delete<PrefService>::operator() [0x00007FF653418961+49] (c:\chromium\src\buildtools\third_party\libc++\trunk\include\__memory\unique_ptr.h:55)
        std::__1::unique_ptr<PrefService,std::__1::default_delete<PrefService> >::reset [0x00007FF6534188E3+115] (c:\chromium\src\buildtools\third_party\libc++\trunk\include\__memory\unique_ptr.h:316)
        std::__1::unique_ptr<PrefService,std::__1::default_delete<PrefService> >::~unique_ptr [0x00007FF653414AA7+23] (c:\chromium\src\buildtools\third_party\libc++\trunk\include\__memory\unique_ptr.h:269)
        content::ShellContentBrowserClient::~ShellContentBrowserClient [0x00007FF653414A0F+63] (c:\chromium\src\content\shell\browser\shell_content_browser_client.cc:251)
        content::ContentBrowserTestShellContentBrowserClient::~ContentBrowserTestShellContentBrowserClient [0x00007FF654021C83+19] (c:\chromium\src\content\public\test\content_browser_test_shell_main_delegate.cc:15)
        content::ContentBrowserTestShellContentBrowserClient::~ContentBrowserTestShellContentBrowserClient [0x00007FF654021C2C+44] (c:\chromium\src\content\public\test\content_browser_test_shell_main_delegate.cc:15)
        std::__1::default_delete<content::ShellContentBrowserClient>::operator() [0x00007FF654022021+49] (c:\chromium\src\buildtools\third_party\libc++\trunk\include\__memory\unique_ptr.h:55)
        std::__1::unique_ptr<content::ShellContentBrowserClient,std::__1::default_delete<content::ShellContentBrowserClient> >::reset [0x00007FF654021F03+115] (c:\chromium\src\buildtools\third_party\libc++\trunk\include\__memory\unique_ptr.h:316)
        std::__1::unique_ptr<content::ShellContentBrowserClient,std::__1::default_delete<content::ShellContentBrowserClient> >::~unique_ptr [0x00007FF654022AE7+23] (c:\chromium\src\buildtools\third_party\libc++\trunk\include\__memory\unique_ptr.h:269)
        content::ShellMainDelegate::~ShellMainDelegate [0x00007FF654022A2E+94] (c:\chromium\src\content\shell\app\shell_main_delegate.cc:135)
        content::ContentBrowserTestShellMainDelegate::~ContentBrowserTestShellMainDelegate [0x00007FF654021923+19] (c:\chromium\src\content\public\test\content_browser_test_shell_main_delegate.cc:27)
        content::ContentBrowserTestShellMainDelegate::~ContentBrowserTestShellMainDelegate [0x00007FF654021B0C+44] (c:\chromium\src\content\public\test\content_browser_test_shell_main_delegate.cc:27)
        std::__1::default_delete<content::ContentMainDelegate>::operator() [0x00007FF65383D421+49] (c:\chromium\src\buildtools\third_party\libc++\trunk\include\__memory\unique_ptr.h:55)
        std::__1::unique_ptr<content::ContentMainDelegate,std::__1::default_delete<content::ContentMainDelegate> >::reset [0x00007FF65383D3A3+115] (c:\chromium\src\buildtools\third_party\libc++\trunk\include\__memory\unique_ptr.h:316)
        std::__1::unique_ptr<content::ContentMainDelegate,std::__1::default_delete<content::ContentMainDelegate> >::~unique_ptr [0x00007FF65383BA47+23] (c:\chromium\src\buildtools\third_party\libc++\trunk\include\__memory\unique_ptr.h:269)
        content::LaunchTests [0x00007FF65383B7EB+1707] (c:\chromium\src\content\public\test\test_launcher.cc:441)
        main [0x00007FF654021563+163] (c:\chromium\src\content\test\content_test_launcher.cc:95)
        invoke_main [0x00007FF6541AD9D9+57] (d:\a01\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:79)
        __scrt_common_main_seh [0x00007FF6541ADB0E+302] (d:\a01\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288)
        __scrt_common_main [0x00007FF6541ADB8E+14] (d:\a01\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:331)
        mainCRTStartup [0x00007FF6541ADBAE+14] (d:\a01\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp:17)
        BaseThreadInitThunk [0x00007FFB852A7034+20]
        RtlUserThreadStart [0x00007FFB870A2651+33]
Crash keys:
  "ui_scheduler_async_stack" = "0x7FFAE0686DCD 0x7FFAE0686B82"
  "io_scheduler_async_stack" = "0x7FFB230CB27C 0x0"

[1/1] SyntheticInputTest.DestroyWidgetWithOngoingGesture (10831 ms)
1 test failed on exit:
    SyntheticInputTest.DestroyWidgetWithOngoingGesture (../../content/browser/renderer_host/input/synthetic_input_browsertest.cc:90)

그러나 해당 테스트가 fail나는 이유를 알 수 없었다. 내 수정사항으로 인해 생기는 문제임은 틀림없지만, 큰 힌트가 되어주는 에러 메시지들마저도 평소에 비해 해석하기 어려워 어떤 부분을 살펴봐야 하는지 도출해내기 어려웠다.

해결방법을 찾아 헤매던 도중에, 리뷰어로부터 한 메시지가 왔다.
https://chromium-review.googlesource.com/c/chromium/src/+/3210328의 패치가 merge되고 나면, 나의 패치 또한 정상적으로 통과할 것이라는 내용이었다.

해당 패치 페이지에 들어가서 확인해보니, 나의 패치와 어떤 관련성이 있는지 아직 알지는 못하지만 문제를 대신 해결해준 리뷰어에게 너무 감사했다. 실제로 리뷰어의 패치가 merge된 이후 cq를 다시 돌려보니,

testcase가 모두 통과되었다. (그전에 떴던 수많은 red lights들..)
드디어, 정상적으로 merge되어 올라갔다. 끝!

profile
Department of Computer Science

0개의 댓글