기여 목록 / 8584057
[blink] Use Blink containers in LayerTreeView
BlinkrefactorMerged
Blink platform/widget/compositing의 LayerTreeView가 프레임별 콜백 큐에 쓰던 base::circular_deque와 std::vector를 Blink 컨테이너인 Deque와 Vector로 바꾼 리팩터링입니다.
문제 설명
LayerTreeView는 Blinkplatform/디렉터리에 있지만, frame token별 콜백을 쌓아 두는prcore_animation_error_code_callbacks_(Apple 전용)가base::circular_deque<std::pair<uint32_t, std::vector<...>>>를 쓰고 있었습니다.- Blink 스타일 가이드는
platform/코드에서 STL이나 base 타입보다 Blink 타입을 쓰도록 권장합니다. - 이 지적은 FrameToken 동작을 frame_index에 맞춘 CL(https://crrev.com/c/6892099)을 AI 리뷰어가 검토하면서 나왔고, 별도 이슈(crbug.com/441562389)로 등록되었습니다.
해결 내용
layer_tree_view.h에서base/containers/circular_deque.hinclude를 지우고wtf/deque.h와wtf/vector.h를 추가했습니다.presentation_callbacks_와core_animation_error_code_callbacks_의 타입을Deque<std::pair<uint32_t, Vector<...>>>로 바꿨습니다.- 두 큐를 공통으로 다루는
AddCallback<Callback>()템플릿의 매개변수 타입과 내부new_callbacks타입도 맞춰 바꿨습니다. - 이슈 범위에 맞춰 컨테이너 타입만 바꾸고,
DidPresentCompositorFrame()의 콜백 실행 루프 같은 로직은 건드리지 않았습니다.
// Before
base::circular_deque<std::pair<
uint32_t,
std::vector<base::OnceCallback<void(const viz::FrameTimingDetails&)>>>>
presentation_callbacks_;
// After
Deque<std::pair<
uint32_t,
Vector<base::OnceCallback<void(const viz::FrameTimingDetails&)>>>>
presentation_callbacks_;테스트 방법
- 동작 변화가 없는 타입 교체라서 새 테스트는 추가하지 않았습니다.
- CQ dry run으로 컴파일(특히 Mac의
IS_APPLE경로)과 기존LayerTreeView테스트를 확인합니다. - 업로드 전에
git cl presubmit --upload를 통과했습니다. _tools도 같이 업데이트해야 presubmit이 깨지지 않습니다 (CheckInclusiveLanguage()인자 불일치 오류를 겪었습니다).