text: // Copyright 2015 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  #include "third_party/blink/renderer/core/frame/layout_subtree_root_list.h"
  
  #include "third_party/blink/renderer/core/layout/layout_object.h"
  
  namespace blink {
  
  void LayoutSubtreeRootList::ClearAndMarkContainingBlocksForLayout() {
    for (auto* const iter : Unordered())
      iter->MarkContainerChainForLayout(false);
    Clear();
  }
  
  LayoutObject* LayoutSubtreeRootList::RandomRoot() {
    DCHECK(!IsEmpty());
    return *Unordered().begin();
  }
  
  void LayoutSubtreeRootList::CountObjectsNeedingLayoutInRoot(
      const LayoutObject* object,
      unsigned& needs_layout_objects,
      unsigned& total_objects) {
    for (const LayoutObject* o = object; o; o = o->NextInPreOrder(object)) {
      ++total_objects;
      if (o->NeedsLayout())
        ++needs_layout_objects;
    }
  }
  
  void LayoutSubtreeRootList::CountObjectsNeedingLayout(
      unsigned& needs_layout_objects,
      unsigned& total_objects) {
    // TODO(leviw): This will double-count nested roots crbug.com/509141
    for (auto* const root : Unordered())
      CountObjectsNeedingLayoutInRoot(root, needs_layout_objects, total_objects);
  }
  
  }  // namespace blink
  