diff --git a/core/core.api.php b/core/core.api.php
index 161ddb91..f822f9e 100644
--- a/core/core.api.php
+++ b/core/core.api.php
@@ -2441,8 +2441,8 @@ function hook_validation_constraint_alter(array &$definitions) {
  * @code
  * array('#type' => 'status_messages')
  * @endcode
- * to a render array, use drupal_render() to render it, and add a command to
- * place the messages in an appropriate location.
+ * to a render array, use \Drupal::service('renderer')->render() to render it,
+ * and add a command to place the messages in an appropriate location.
  *
  * @section sec_other Other methods for triggering Ajax
  * Here are some additional methods you can use to trigger Ajax responses in
diff --git a/core/includes/common.inc b/core/includes/common.inc
index 323a666..101f711 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -600,7 +600,7 @@ function drupal_process_states(&$elements) {
  *     'id' => 'my-module-table',
  *   ),
  * );
- * return drupal_render($table);
+ * return \Drupal::service('renderer')->render($table);
  * @endcode
  *
  * In the theme function for the form, a special class must be added to each
@@ -762,7 +762,8 @@ function drupal_pre_render_link($element) {
  *
  * The purpose of this is to allow links to be logically grouped into related
  * categories, so that each child group can be rendered as its own list of
- * links if drupal_render() is called on it, but calling drupal_render() on the
+ * links if \Drupal::service('renderer')->render() is called on it,
+ * but calling \Drupal::service('renderer')->render() on the
  * parent element will still produce a single list containing all the remaining
  * links, regardless of what group they were in.
  *
@@ -887,7 +888,7 @@ function drupal_render(&$elements, $is_recursive_call = FALSE) {
  *   rendering when possible or loop through the elements and render them as
  *   they are available.
  *
- * @see drupal_render()
+ * @see \Drupal\Core\Render\RendererInterface::render()
  */
 function drupal_render_children(&$element, $children_keys = NULL) {
   if ($children_keys === NULL) {
@@ -941,14 +942,14 @@ function render(&$element) {
 /**
  * Hides an element from later rendering.
  *
- * The first time render() or drupal_render() is called on an element tree,
- * as each element in the tree is rendered, it is marked with a #printed flag
- * and the rendered children of the element are cached. Subsequent calls to
- * render() or drupal_render() will not traverse the child tree of this element
- * again: they will just use the cached children. So if you want to hide an
- * element, be sure to call hide() on the element before its parent tree is
- * rendered for the first time, as it will have no effect on subsequent
- * renderings of the parent tree.
+ * The first time render() or \Drupal::service('renderer')->render() is called
+ * on an element tree, as each element in the tree is rendered, it is marked
+ * with a #printed flag and the rendered children of the element are cached.
+ * Subsequent calls to render() or \Drupal::service('renderer')->render() will
+ * not traverse the child tree of this element again: they will just use the
+ * cached children. So if you want to hide an element, be sure to call hide() on
+ * the element before its parent tree is rendered for the first time, as it will
+ * have no effect on subsequent renderings of the parent tree.
  *
  * @param $element
  *   The element to be hidden.
@@ -970,14 +971,14 @@ function hide(&$element) {
  * You can also use render($element), which shows the element while rendering
  * it.
  *
- * The first time render() or drupal_render() is called on an element tree,
- * as each element in the tree is rendered, it is marked with a #printed flag
- * and the rendered children of the element are cached. Subsequent calls to
- * render() or drupal_render() will not traverse the child tree of this element
- * again: they will just use the cached children. So if you want to show an
- * element, be sure to call show() on the element before its parent tree is
- * rendered for the first time, as it will have no effect on subsequent
- * renderings of the parent tree.
+ * The first time render() or \Drupal::service('renderer')->render() is called
+ * on an element tree, as each element in the tree is rendered, it is marked
+ * with a #printed flag and the rendered children of the element are cached.
+ * Subsequent calls to render() or \Drupal::service('renderer')->render() will
+ * not traverse the child tree of this element again: they will just use the
+ * cached children. So if you want to show an element, be sure to call show() on
+ * the element before its parent tree is rendered for the first time, as it will
+ * have no effect on subsequent renderings of the parent tree.
  *
  * @param $element
  *   The element to be shown.
diff --git a/core/lib/Drupal/Core/Entity/Controller/EntityListController.php b/core/lib/Drupal/Core/Entity/Controller/EntityListController.php
index d8a1ea1..ee35467 100644
--- a/core/lib/Drupal/Core/Entity/Controller/EntityListController.php
+++ b/core/lib/Drupal/Core/Entity/Controller/EntityListController.php
@@ -16,7 +16,8 @@ class EntityListController extends ControllerBase {
    *   The entity type to render.
    *
    * @return array
-   *   A render array as expected by drupal_render().
+   *   A render array as expected by
+   *   \Drupal\Core\Render\RendererInterface::render().
    */
   public function listing($entity_type) {
     return $this->entityManager()->getListBuilder($entity_type)->render();
diff --git a/core/lib/Drupal/Core/Entity/Controller/EntityViewController.php b/core/lib/Drupal/Core/Entity/Controller/EntityViewController.php
index 983eec8..7922ef4 100644
--- a/core/lib/Drupal/Core/Entity/Controller/EntityViewController.php
+++ b/core/lib/Drupal/Core/Entity/Controller/EntityViewController.php
@@ -88,7 +88,8 @@ public function buildTitle(array $page) {
    *   Defaults to 'full'.
    *
    * @return array
-   *   A render array as expected by drupal_render().
+   *   A render array as expected by
+   *   \Drupal\Core\Render\RendererInterface::render().
    */
   public function view(EntityInterface $_entity, $view_mode = 'full') {
     $page = $this->entityManager
diff --git a/core/lib/Drupal/Core/Entity/EntityListBuilderInterface.php b/core/lib/Drupal/Core/Entity/EntityListBuilderInterface.php
index bab9d97..eb16874 100644
--- a/core/lib/Drupal/Core/Entity/EntityListBuilderInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityListBuilderInterface.php
@@ -47,7 +47,8 @@ public function getOperations(EntityInterface $entity);
    * Builds a listing of entities for the given entity type.
    *
    * @return array
-   *   A render array as expected by drupal_render().
+   *   A render array as expected by
+   *   \Drupal\Core\Render\RendererInterface::render().
    */
   public function render();
 
diff --git a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
index 2c3340e..aff8125 100644
--- a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
+++ b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
@@ -213,7 +213,7 @@ protected function getBuildDefaults(EntityInterface $entity, $view_mode) {
    * @return array
    *   The updated renderable array.
    *
-   * @see drupal_render()
+   * @see \Drupal\Core\Render\RendererInterface::render()
    */
   public function build(array $build) {
     $build_list = [$build];
@@ -227,8 +227,8 @@ public function build(array $build) {
    * This function is assigned as a #pre_render callback in ::viewMultiple().
    *
    * By delaying the building of an entity until the #pre_render processing in
-   * drupal_render(), the processing cost of assembling an entity's renderable
-   * array is saved on cache-hit requests.
+   * \Drupal::service('renderer')->render(), the processing cost of
+   * assembling an entity's renderable array is saved on cache-hit requests.
    *
    * @param array $build_list
    *   A renderable  array containing build information and context for an
@@ -237,7 +237,7 @@ public function build(array $build) {
    * @return array
    *   The updated renderable array.
    *
-   * @see drupal_render()
+   * @see \Drupal\Core\Render\RendererInterface::render()
    */
   public function buildMultiple(array $build_list) {
     // Build the view modes and display objects.
diff --git a/core/lib/Drupal/Core/Entity/entity.api.php b/core/lib/Drupal/Core/Entity/entity.api.php
index f9f4271..c6f98ad 100644
--- a/core/lib/Drupal/Core/Entity/entity.api.php
+++ b/core/lib/Drupal/Core/Entity/entity.api.php
@@ -495,7 +495,7 @@
  * // rules will be used.
  * $build = $view_builder->view($entity, 'view_mode_name', $language->getId());
  * // $build is a render array.
- * $rendered = drupal_render($build);
+ * $rendered = \Drupal::service('renderer')->render($build);
  * @endcode
  *
  * @section sec_access Access checking on entities
@@ -1264,7 +1264,7 @@ function hook_ENTITY_TYPE_revision_delete(Drupal\Core\Entity\EntityInterface $en
  * @param &$build
  *   A renderable array representing the entity content. The module may add
  *   elements to $build prior to rendering. The structure of $build is a
- *   renderable array as expected by drupal_render().
+ *   renderable array as expected by \Drupal::service('renderer')->render().
  * @param \Drupal\Core\Entity\EntityInterface $entity
  *   The entity object.
  * @param \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display
@@ -1296,7 +1296,7 @@ function hook_entity_view(array &$build, \Drupal\Core\Entity\EntityInterface $en
  * @param &$build
  *   A renderable array representing the entity content. The module may add
  *   elements to $build prior to rendering. The structure of $build is a
- *   renderable array as expected by drupal_render().
+ *   renderable array as expected by \Drupal::service('renderer')->render().
  * @param \Drupal\Core\Entity\EntityInterface $entity
  *   The entity object.
  * @param \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display
@@ -1335,7 +1335,7 @@ function hook_ENTITY_TYPE_view(array &$build, \Drupal\Core\Entity\EntityInterfac
  * the particular entity type template, if there is one (e.g., node.html.twig).
  *
  * See the @link themeable Default theme implementations topic @endlink and
- * drupal_render() for details.
+ * \Drupal::service('renderer')->render() for details.
  *
  * @param array &$build
  *   A renderable array representing the entity content.
@@ -1373,7 +1373,7 @@ function hook_entity_view_alter(array &$build, Drupal\Core\Entity\EntityInterfac
  * the particular entity type template, if there is one (e.g., node.html.twig).
  *
  * See the @link themeable Default theme implementations topic @endlink and
- * drupal_render() for details.
+ * \Drupal::service('renderer')->render() for details.
  *
  * @param array &$build
  *   A renderable array representing the entity content.
@@ -1459,7 +1459,8 @@ function hook_entity_view_mode_alter(&$view_mode, Drupal\Core\Entity\EntityInter
 }
 
 /**
- * Alter entity renderable values before cache checking in drupal_render().
+ * Alter entity renderable values before cache checking in
+ * \Drupal\Core\Render\RendererInterface::render().
  *
  * Invoked for a specific entity type.
  *
@@ -1474,7 +1475,7 @@ function hook_entity_view_mode_alter(&$view_mode, Drupal\Core\Entity\EntityInter
  * @param string $view_mode
  *   The view_mode that is to be used to display the entity.
  *
- * @see drupal_render()
+ * @see \Drupal\Core\Render\RendererInterface::render()
  * @see \Drupal\Core\Entity\EntityViewBuilder
  * @see hook_entity_build_defaults_alter()
  *
@@ -1485,7 +1486,8 @@ function hook_ENTITY_TYPE_build_defaults_alter(array &$build, \Drupal\Core\Entit
 }
 
 /**
- * Alter entity renderable values before cache checking in drupal_render().
+ * Alter entity renderable values before cache checking in
+ * \Drupal\Core\Render\RendererInterface::render().
  *
  * The values in the #cache key of the renderable array are used to determine if
  * a cache entry exists for the entity's rendered output. Ideally only values
@@ -1498,7 +1500,7 @@ function hook_ENTITY_TYPE_build_defaults_alter(array &$build, \Drupal\Core\Entit
  * @param string $view_mode
  *   The view_mode that is to be used to display the entity.
  *
- * @see drupal_render()
+ * @see \Drupal\Core\Render\RendererInterface::render()
  * @see \Drupal\Core\Entity\EntityViewBuilder
  * @see hook_ENTITY_TYPE_build_defaults_alter()
  *
diff --git a/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php
index 447b918..fed58c4 100644
--- a/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php
@@ -17,10 +17,11 @@
 /**
  * Subscriber that wraps controllers, to handle early rendering.
  *
- * When controllers call drupal_render() (RendererInterface::render()) outside
- * of a render context, we call that "early rendering". Controllers should
- * return only render arrays, but we cannot prevent controllers from doing early
- * rendering. The problem with early rendering is that the bubbleable metadata
+ * When controllers call \Drupal::service('renderer')->render()
+ * (RendererInterface::render()) outside of a render context, we call
+ * that "early rendering". Controllers should return only render
+ * arrays, but we cannot prevent controllers from doing early rendering.
+ * The problem with early rendering is that the bubbleable metadata
  * (cacheability & attachments) are lost.
  *
  * This can lead to broken pages (missing assets), stale pages (missing cache
@@ -36,8 +37,8 @@
  * ::renderPlain() methods. In that case, no bubbleable metadata is lost.
  *
  * If the render context is not empty, then the controller did use
- * drupal_render(), and bubbleable metadata was collected. This bubbleable
- * metadata is then merged onto the render array.
+ * \Drupal::service('renderer')->render(), and bubbleable metadata was
+ * collected. This bubbleable metadata is then merged onto the render array.
  *
  * In other words: this just exists to ease the transition to Drupal 8: it
  * allows controllers that return render arrays (the majority) and
@@ -124,7 +125,8 @@ protected function wrapControllerExecutionInRenderContext($controller, array $ar
     });
 
     // If early rendering happened, i.e. if code in the controller called
-    // drupal_render() outside of a render context, then the bubbleable metadata
+    // \Drupal::service('renderer')->render() outside of a render context,
+    // then the bubbleable metadata
     // for that is stored in the current render context.
     if (!$context->isEmpty()) {
       /** @var \Drupal\Core\Render\BubbleableMetadata $early_rendering_bubbleable_metadata */
diff --git a/core/lib/Drupal/Core/Form/FormBuilderInterface.php b/core/lib/Drupal/Core/Form/FormBuilderInterface.php
index ca79437..2d38ebf 100644
--- a/core/lib/Drupal/Core/Form/FormBuilderInterface.php
+++ b/core/lib/Drupal/Core/Form/FormBuilderInterface.php
@@ -244,10 +244,11 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state);
    * This is one of the three primary functions that recursively iterates a form
    * array. This one does it for completing the form building process. The other
    * two are self::doValidateForm() (invoked via self::validateForm() and used
-   * to invoke validation logic for each element) and drupal_render() (for
-   * rendering each element). Each of these three pipelines provides ample
-   * opportunity for modules to customize what happens. For example, during this
-   * function's life cycle, the following functions get called for each element:
+   * to invoke validation logic for each element) and
+   * \Drupal::service('renderer')->render() (for rendering each element).
+   * Each of these three pipelines provides ample opportunity for modules to
+   * customize what happens. For example, during this function's life cycle,
+   * the following functions get called for each element:
    * - $element['#value_callback']: A callable that implements how user input is
    *   mapped to an element's #value property. This defaults to a function named
    *   'form_type_TYPE_value' where TYPE is $element['#type'].
@@ -268,8 +269,8 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state);
    *   called in postorder traversal, meaning they are called for the child
    *   elements first, then for the parent element.
    * There are similar properties containing callback functions invoked by
-   * self::doValidateForm() and drupal_render(), appropriate for those
-   * operations.
+   * self::doValidateForm() and \Drupal::service('renderer')->render(),
+   * appropriate for those operations.
    *
    * Developers are strongly encouraged to integrate the functionality needed by
    * their form or module within one of these three pipelines, using the
diff --git a/core/lib/Drupal/Core/Form/form.api.php b/core/lib/Drupal/Core/Form/form.api.php
index ba0e345..fc55b09 100644
--- a/core/lib/Drupal/Core/Form/form.api.php
+++ b/core/lib/Drupal/Core/Form/form.api.php
@@ -120,7 +120,7 @@ function callback_batch_finished($success, $results, $operations) {
       '#theme' => 'item_list',
       '#items' => $results,
     ];
-    $message .= drupal_render($list);
+    $message .= \Drupal::service('renderer')->render($list);
     drupal_set_message($message);
   }
   else {
diff --git a/core/lib/Drupal/Core/Menu/MenuLinkTree.php b/core/lib/Drupal/Core/Menu/MenuLinkTree.php
index 8a6dce8..41dd454 100644
--- a/core/lib/Drupal/Core/Menu/MenuLinkTree.php
+++ b/core/lib/Drupal/Core/Menu/MenuLinkTree.php
@@ -170,7 +170,8 @@ public function build(array $tree) {
     $tree_cacheability->applyTo($build);
 
     if ($items) {
-      // Make sure drupal_render() does not re-order the links.
+      // Make sure \Drupal::service('renderer')->render() does not re-order the
+      // links.
       $build['#sorted'] = TRUE;
       // Get the menu name from the last link.
       $item = end($items);
diff --git a/core/lib/Drupal/Core/Menu/menu.api.php b/core/lib/Drupal/Core/Menu/menu.api.php
index f932cf9..50dc9e3 100644
--- a/core/lib/Drupal/Core/Menu/menu.api.php
+++ b/core/lib/Drupal/Core/Menu/menu.api.php
@@ -201,7 +201,7 @@
  * // Finally, build a renderable array from the transformed tree.
  * $menu = $menu_tree->build($tree);
  *
- * $menu_html = drupal_render($menu);
+ * $menu_html = \Drupal::service('renderer')->render($menu);
  * @endcode
  *
  * @}
diff --git a/core/lib/Drupal/Core/Render/Element.php b/core/lib/Drupal/Core/Render/Element.php
index e394a39..2763024 100644
--- a/core/lib/Drupal/Core/Render/Element.php
+++ b/core/lib/Drupal/Core/Render/Element.php
@@ -57,7 +57,8 @@ public static function child($key) {
    * Identifies the children of an element array, optionally sorted by weight.
    *
    * The children of a element array are those key/value pairs whose key does
-   * not start with a '#'. See drupal_render() for details.
+   * not start with a '#'. See \Drupal::service('renderer')->render()
+   * for details.
    *
    * @param array $elements
    *   The element array whose children are to be identified. Passed by
diff --git a/core/lib/Drupal/Core/Render/Element/HtmlTag.php b/core/lib/Drupal/Core/Render/Element/HtmlTag.php
index 0b9ac91..366519d 100644
--- a/core/lib/Drupal/Core/Render/Element/HtmlTag.php
+++ b/core/lib/Drupal/Core/Render/Element/HtmlTag.php
@@ -163,8 +163,8 @@ public static function preRenderConditionalComments($element) {
     // technique. See http://wikipedia.org/wiki/Conditional_comment
     // for details.
 
-    // Ensure what we are dealing with is safe.
-    // This would be done later anyway in drupal_render().
+    // Ensure what we are dealing with is safe. This would be done later anyway
+    // in \Drupal::service('renderer')->render().
     $prefix = isset($element['#prefix']) ? $element['#prefix'] : '';
     if ($prefix && !($prefix instanceof MarkupInterface)) {
       $prefix = Xss::filterAdmin($prefix);
diff --git a/core/lib/Drupal/Core/Render/Renderer.php b/core/lib/Drupal/Core/Render/Renderer.php
index 257349f..cb2f60c 100644
--- a/core/lib/Drupal/Core/Render/Renderer.php
+++ b/core/lib/Drupal/Core/Render/Renderer.php
@@ -544,7 +544,7 @@ protected function doRender(&$elements, $is_root_call = FALSE) {
       $this->replacePlaceholders($elements);
       // @todo remove as part of https://www.drupal.org/node/2511330.
       if ($context->count() !== 1) {
-        throw new \LogicException('A stray drupal_render() invocation with $is_root_call = TRUE is causing bubbling of attached assets to break.');
+        throw new \LogicException('A stray \Drupal::service(\'renderer\')->render() invocation with $is_root_call = TRUE is causing bubbling of attached assets to break.');
       }
     }
 
diff --git a/core/lib/Drupal/Core/Render/theme.api.php b/core/lib/Drupal/Core/Render/theme.api.php
index db7a161..e415945 100644
--- a/core/lib/Drupal/Core/Render/theme.api.php
+++ b/core/lib/Drupal/Core/Render/theme.api.php
@@ -17,11 +17,11 @@
  * hierarchical arrays that include the data to be rendered into HTML (or XML or
  * another output format), and options that affect the markup. Render arrays
  * are ultimately rendered into HTML or other output formats by recursive calls
- * to drupal_render(), traversing the depth of the render array hierarchy. At
- * each level, the theme system is invoked to do the actual rendering. See the
- * documentation of drupal_render() and the
- * @link theme_render Theme system and Render API topic @endlink for more
- * information about render arrays and rendering.
+ * to \Drupal::service('renderer')->render(), traversing the depth of the render
+ * array hierarchy. At each level, the theme system is invoked to do the actual
+ * rendering. See the documentation of \Drupal::service('renderer')->render()
+ * and the @link theme_render Theme system and Render API topic @endlink for
+ * more information about render arrays and rendering.
  *
  * @section sec_twig_theme Twig Templating Engine
  * Drupal 8 uses the templating engine Twig. Twig offers developers a fast,
@@ -232,13 +232,16 @@
  * hierarchical associative array containing data to be rendered and properties
  * describing how the data should be rendered. A render array that is returned
  * by a function to specify markup to be sent to the web browser or other
- * services will eventually be rendered by a call to drupal_render(), which will
+ * services will eventually be rendered by a call to
+ * \Drupal::service('renderer')->render(), which will
  * recurse through the render array hierarchy if appropriate, making calls into
  * the theme system to do the actual rendering. If a function or method actually
  * needs to return rendered output rather than a render array, the best practice
- * would be to create a render array, render it by calling drupal_render(), and
+ * would be to create a render array, render it by calling
+ * \Drupal::service('renderer')->render(), and
  * return that result, rather than writing the markup directly. See the
- * documentation of drupal_render() for more details of the rendering process.
+ * documentation of \Drupal::service('renderer')->render() for more details
+ * of the rendering process.
  *
  * Each level in the hierarchy of a render array (including the outermost array)
  * has one or more array elements. Array elements whose names start with '#' are
diff --git a/core/lib/Drupal/Core/Utility/token.api.php b/core/lib/Drupal/Core/Utility/token.api.php
index 5916752..14b6e48 100644
--- a/core/lib/Drupal/Core/Utility/token.api.php
+++ b/core/lib/Drupal/Core/Utility/token.api.php
@@ -166,7 +166,7 @@ function hook_tokens_alter(array &$replacements, array $context, \Drupal\Core\Re
     // of a field (field_title).
     if (isset($context['tokens']['title'])) {
       $title = $node->field_title->view('default');
-      $replacements[$context['tokens']['title']] = drupal_render($title);
+      $replacements[$context['tokens']['title']] = \Drupal::service('renderer')->render($title);
     }
   }
 }
diff --git a/core/modules/aggregator/src/Controller/AggregatorController.php b/core/modules/aggregator/src/Controller/AggregatorController.php
index 021e4d1..d29ba1f 100644
--- a/core/modules/aggregator/src/Controller/AggregatorController.php
+++ b/core/modules/aggregator/src/Controller/AggregatorController.php
@@ -44,7 +44,7 @@ public static function create(ContainerInterface $container) {
    * Presents the aggregator feed creation form.
    *
    * @return array
-   *   A form array as expected by drupal_render().
+   *   A form array as expected by \Drupal::service('renderer')->render().
    */
   public function feedAdd() {
     $feed = $this->entityManager()->getStorage('aggregator_feed')
@@ -104,7 +104,7 @@ public function feedRefresh(FeedInterface $aggregator_feed) {
    * Displays the aggregator administration page.
    *
    * @return array
-   *   A render array as expected by drupal_render().
+   *   A render array as expected by \Drupal::service('renderer')->render().
    */
   public function adminOverview() {
     $entity_manager = $this->entityManager();
diff --git a/core/modules/block/block.api.php b/core/modules/block/block.api.php
index 4c7faf5..7c42b1e 100644
--- a/core/modules/block/block.api.php
+++ b/core/modules/block/block.api.php
@@ -72,8 +72,9 @@
  * If the module wishes to act on the rendered HTML of the block rather than
  * the structured content array, it may use this hook to add a #post_render
  * callback. Alternatively, it could also implement hook_preprocess_HOOK() for
- * block.html.twig. See drupal_render() documentation or the
- * @link themeable Default theme implementations topic @endlink for details.
+ * block.html.twig. See \Drupal::service('renderer')->render()
+ * documentation or the @link themeable Default theme implementations topic
+ * @endlink for details.
  *
  * In addition to hook_block_view_alter(), which is called for all blocks, there
  * is hook_block_view_BASE_BLOCK_ID_alter(), which can be used to target a
diff --git a/core/modules/block/src/Controller/BlockListController.php b/core/modules/block/src/Controller/BlockListController.php
index 74ea9c1..b83fd68 100644
--- a/core/modules/block/src/Controller/BlockListController.php
+++ b/core/modules/block/src/Controller/BlockListController.php
@@ -48,7 +48,7 @@ public static function create(ContainerInterface $container) {
    *   The current request.
    *
    * @return array
-   *   A render array as expected by drupal_render().
+   *   A render array as expected by \Drupal::service('renderer')->render().
    */
   public function listing($theme = NULL, Request $request = NULL) {
     $theme = $theme ?: $this->config('system.theme')->get('default');
diff --git a/core/modules/block_content/src/Controller/BlockContentController.php b/core/modules/block_content/src/Controller/BlockContentController.php
index 7c1f8aa..3c0a094 100644
--- a/core/modules/block_content/src/Controller/BlockContentController.php
+++ b/core/modules/block_content/src/Controller/BlockContentController.php
@@ -98,7 +98,7 @@ public function add(Request $request) {
    *   The current request object.
    *
    * @return array
-   *   A form array as expected by drupal_render().
+   *   A form array as expected by \Drupal::service('renderer')->render().
    */
   public function addForm(BlockContentTypeInterface $block_content_type, Request $request) {
     $block = $this->blockContentStorage->create([
diff --git a/core/modules/book/src/BookManager.php b/core/modules/book/src/BookManager.php
index 3e14c40..3b85290 100644
--- a/core/modules/book/src/BookManager.php
+++ b/core/modules/book/src/BookManager.php
@@ -504,7 +504,8 @@ public function bookTreeOutput(array $tree) {
     $build = [];
 
     if ($items) {
-      // Make sure drupal_render() does not re-order the links.
+      // Make sure \Drupal::service('renderer')->render() does not re-order the
+      // links.
       $build['#sorted'] = TRUE;
       // Get the book id from the last link.
       $item = end($items);
diff --git a/core/modules/book/src/BookManagerInterface.php b/core/modules/book/src/BookManagerInterface.php
index 5402bf5..34022ed 100644
--- a/core/modules/book/src/BookManagerInterface.php
+++ b/core/modules/book/src/BookManagerInterface.php
@@ -247,7 +247,8 @@ public function deleteFromBook($nid);
    *   A data structure representing the tree as returned from buildBookOutlineData.
    *
    * @return array
-   *   A structured array to be rendered by drupal_render().
+   *   A structured array to be rendered by
+   *   \Drupal::service('renderer')->render().
    *
    * @see \Drupal\Core\Menu\MenuLinkTree::build
    */
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index ee26510..a8086cd 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -262,7 +262,7 @@ function comment_node_view_alter(array &$build, EntityInterface $node, EntityVie
  *   content language of the current request.
  *
  * @return array
- *   An array as expected by drupal_render().
+ *   An array as expected by \Drupal\Core\Render\RendererInterface::render()
  *
  * @deprecated in Drupal 8.x and will be removed before Drupal 9.0.
  *   Use \Drupal::entityManager()->getViewBuilder('comment')->view().
@@ -285,12 +285,12 @@ function comment_view(CommentInterface $comment, $view_mode = 'full', $langcode
  *   Defaults to NULL.
  *
  * @return array
- *   An array in the format expected by drupal_render().
+ *   An array in the format expected by \Drupal::service('renderer')->render().
  *
  * @deprecated in Drupal 8.x and will be removed before Drupal 9.0.
  *   Use \Drupal::entityManager()->getViewBuilder('comment')->viewMultiple().
  *
- * @see drupal_render()
+ * @see \Drupal::service('renderer')->render()
  */
 function comment_view_multiple($comments, $view_mode = 'full', $langcode = NULL) {
   return entity_view_multiple($comments, $view_mode, $langcode);
@@ -565,7 +565,7 @@ function comment_user_predelete($account) {
  *   The current state of the form.
  *
  * @return array
- *   An array as expected by drupal_render().
+ *   An array as expected by \Drupal\Core\Render\RendererInterface::render()
  */
 function comment_preview(CommentInterface $comment, FormStateInterface $form_state) {
   $preview_build = [];
diff --git a/core/modules/config_translation/src/Controller/ConfigTranslationListController.php b/core/modules/config_translation/src/Controller/ConfigTranslationListController.php
index 7a39289..aad08d4 100644
--- a/core/modules/config_translation/src/Controller/ConfigTranslationListController.php
+++ b/core/modules/config_translation/src/Controller/ConfigTranslationListController.php
@@ -45,7 +45,7 @@ public static function create(ContainerInterface $container) {
    *   The name of the mapper.
    *
    * @return array
-   *   A render array as expected by drupal_render().
+   *   A render array as expected by \Drupal::service('renderer')->render().
    *
    * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
    *   Throws an exception if a mapper plugin could not be instantiated from the
diff --git a/core/modules/contact/src/Controller/ContactController.php b/core/modules/contact/src/Controller/ContactController.php
index b8b69d5..c034685 100644
--- a/core/modules/contact/src/Controller/ContactController.php
+++ b/core/modules/contact/src/Controller/ContactController.php
@@ -47,7 +47,8 @@ public static function create(ContainerInterface $container) {
    *   The contact form to use.
    *
    * @return array
-   *   The form as render array as expected by drupal_render().
+   *   The form as render array as expected by
+   *   \Drupal::service('renderer')->render().
    *
    * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
    *   Exception is thrown when user tries to access non existing default
@@ -94,7 +95,8 @@ public function contactSitePage(ContactFormInterface $contact_form = NULL) {
    *   The account for which a personal contact form should be generated.
    *
    * @return array
-   *   The personal contact form as render array as expected by drupal_render().
+   *   The personal contact form as render array as expected by
+   *   \Drupal::service('renderer')->render().
    *
    * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
    *   Exception is thrown when user tries to access a contact form for a
diff --git a/core/modules/contextual/src/Element/ContextualLinks.php b/core/modules/contextual/src/Element/ContextualLinks.php
index 62e8966..1ff498e 100644
--- a/core/modules/contextual/src/Element/ContextualLinks.php
+++ b/core/modules/contextual/src/Element/ContextualLinks.php
@@ -86,7 +86,8 @@ public static function preRenderLinks(array $element) {
     // Allow modules to alter the renderable contextual links element.
     static::moduleHandler()->alter('contextual_links_view', $element, $items);
 
-    // If there are no links, tell drupal_render() to abort rendering.
+    // If there are no links, tell \Drupal::service('renderer')->render() to
+    // abort rendering.
     if (empty($element['#links'])) {
       $element['#printed'] = TRUE;
     }
diff --git a/core/modules/dblog/src/Controller/DbLogController.php b/core/modules/dblog/src/Controller/DbLogController.php
index 10e2af8..7d21b0e 100644
--- a/core/modules/dblog/src/Controller/DbLogController.php
+++ b/core/modules/dblog/src/Controller/DbLogController.php
@@ -113,7 +113,7 @@ public static function getLogLevelClassMap() {
    * Full-length messages can be viewed on the message details page.
    *
    * @return array
-   *   A render array as expected by drupal_render().
+   *   A render array as expected by \Drupal::service('renderer')->render().
    *
    * @see Drupal\dblog\Form\DblogClearLogConfirmForm
    * @see Drupal\dblog\Controller\DbLogController::eventDetails()
@@ -233,7 +233,7 @@ public function overview() {
    *
    * @return array
    *   If the ID is located in the Database Logging table, a build array in the
-   *   format expected by drupal_render();
+   *   format expected by \Drupal::service('renderer')->render();
    */
   public function eventDetails($event_id) {
     $build = [];
@@ -373,7 +373,8 @@ public function formatMessage($row) {
    *   Type of database log events to display (e.g., 'search').
    *
    * @return array
-   *   A build array in the format expected by drupal_render().
+   *   A build array in the format expected by
+   *   \Drupal::service('renderer')->render().
    */
   public function topLogMessages($type) {
     $header = [
diff --git a/core/modules/field_ui/src/Controller/FieldConfigListController.php b/core/modules/field_ui/src/Controller/FieldConfigListController.php
index 0a6911a..599d439 100644
--- a/core/modules/field_ui/src/Controller/FieldConfigListController.php
+++ b/core/modules/field_ui/src/Controller/FieldConfigListController.php
@@ -21,7 +21,7 @@ class FieldConfigListController extends EntityListController {
    *   The current route match.
    *
    * @return array
-   *   A render array as expected by drupal_render().
+   *   A render array as expected by \Drupal::service('renderer')->render().
    */
   public function listing($entity_type_id = NULL, $bundle = NULL, RouteMatchInterface $route_match = NULL) {
     return $this->entityManager()->getListBuilder('field_config')->render($entity_type_id, $bundle);
diff --git a/core/modules/field_ui/src/Element/FieldUiTable.php b/core/modules/field_ui/src/Element/FieldUiTable.php
index 84cafb0..ef453ae 100644
--- a/core/modules/field_ui/src/Element/FieldUiTable.php
+++ b/core/modules/field_ui/src/Element/FieldUiTable.php
@@ -38,7 +38,7 @@ public function getInfo() {
    * @return array
    *   The $element with prepared variables ready for field-ui-table.html.twig.
    *
-   * @see drupal_render()
+   * @see \Drupal::service('renderer')->render()
    * @see \Drupal\Core\Render\Element\Table::preRenderTable()
    */
   public static function tablePreRender($elements) {
diff --git a/core/modules/field_ui/src/Form/EntityDisplayFormBase.php b/core/modules/field_ui/src/Form/EntityDisplayFormBase.php
index 0a91862..7f18ea5 100644
--- a/core/modules/field_ui/src/Form/EntityDisplayFormBase.php
+++ b/core/modules/field_ui/src/Form/EntityDisplayFormBase.php
@@ -702,7 +702,7 @@ public function multistepAjax($form, FormStateInterface $form_state) {
    *
    * @return array
    *
-   * @see drupal_render()
+   * @see \Drupal::service('renderer')->render()
    * @see \Drupal\Core\Render\Element\Table::preRenderTable()
    *
    * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0.
diff --git a/core/modules/help/src/Controller/HelpController.php b/core/modules/help/src/Controller/HelpController.php
index 74d46ec..9b96900 100644
--- a/core/modules/help/src/Controller/HelpController.php
+++ b/core/modules/help/src/Controller/HelpController.php
@@ -107,7 +107,7 @@ public function helpMain() {
    *   A module name to display a help page for.
    *
    * @return array
-   *   A render array as expected by drupal_render().
+   *   A render array as expected by \Drupal::service('renderer')->render().
    *
    * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
    */
diff --git a/core/modules/image/src/Tests/ImageDimensionsTest.php b/core/modules/image/src/Tests/ImageDimensionsTest.php
index b3e100d..9be9f4a 100644
--- a/core/modules/image/src/Tests/ImageDimensionsTest.php
+++ b/core/modules/image/src/Tests/ImageDimensionsTest.php
@@ -277,11 +277,11 @@ public function testImageDimensions() {
   /**
    * Render an image style element.
    *
-   * drupal_render() alters the passed $variables array by adding a new key
-   * '#printed' => TRUE. This prevents next call to re-render the element. We
-   * wrap drupal_render() in a helper protected method and pass each time a
-   * fresh array so that $variables won't get altered and the element is
-   * re-rendered each time.
+   * \Drupal::service('renderer')->render() alters the passed $variables array
+   * by adding a new key '#printed' => TRUE. This prevents next call to
+   * re-render the element. We wrap \Drupal::service('renderer')->render() in a
+   * helper protected method and pass each time a fresh array so that
+   * $variables won't * get altered and the element is re-rendered each time.
    */
   protected function getImageTag($variables) {
     return str_replace("\n", NULL, \Drupal::service('renderer')->renderRoot($variables));
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 40e5b4e..70a0f38 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -794,14 +794,15 @@ function node_get_recent($number = 10) {
  *   the global content language of the current request.
  *
  * @return array
- *   An array as expected by drupal_render().
+ *   An array as expected by \Drupal::service('renderer')->render().
  */
 function node_view(NodeInterface $node, $view_mode = 'full', $langcode = NULL) {
   return entity_view($node, $view_mode, $langcode);
 }
 
 /**
- * Constructs a drupal_render() style array from an array of loaded nodes.
+ * Constructs a \Drupal::service('renderer')->render() style array from an
+ * array of loaded nodes.
  *
  * @param $nodes
  *   An array of nodes as returned by Node::loadMultiple().
@@ -812,7 +813,7 @@ function node_view(NodeInterface $node, $view_mode = 'full', $langcode = NULL) {
  *   content language of the current request.
  *
  * @return array
- *   An array in the format expected by drupal_render().
+ *   An array in the format expected by \Drupal::service('renderer')->render().
  */
 function node_view_multiple($nodes, $view_mode = 'teaser', $langcode = NULL) {
   return entity_view_multiple($nodes, $view_mode, $langcode);
diff --git a/core/modules/node/src/Controller/NodeController.php b/core/modules/node/src/Controller/NodeController.php
index 4840147..dbfcfb0 100644
--- a/core/modules/node/src/Controller/NodeController.php
+++ b/core/modules/node/src/Controller/NodeController.php
@@ -122,7 +122,7 @@ public function add(NodeTypeInterface $node_type) {
    *   The node revision ID.
    *
    * @return array
-   *   An array suitable for drupal_render().
+   *   An array suitable for \Drupal::service('renderer')->render().
    */
   public function revisionShow($node_revision) {
     $node = $this->entityManager()->getStorage('node')->loadRevision($node_revision);
@@ -154,7 +154,7 @@ public function revisionPageTitle($node_revision) {
    *   A node object.
    *
    * @return array
-   *   An array as expected by drupal_render().
+   *   An array as expected by \Drupal::service('renderer')->render().
    */
   public function revisionOverview(NodeInterface $node) {
     $account = $this->currentUser();
diff --git a/core/modules/path/src/Controller/PathController.php b/core/modules/path/src/Controller/PathController.php
index 51f88dd..4decc47 100644
--- a/core/modules/path/src/Controller/PathController.php
+++ b/core/modules/path/src/Controller/PathController.php
@@ -59,7 +59,7 @@ public static function create(ContainerInterface $container) {
    *   The request object.
    *
    * @return array
-   *   A render array as expected by drupal_render().
+   *   A render array as expected by \Drupal::service('renderer')->render().
    */
   public function adminOverview(Request $request) {
     $keys = $request->query->get('search');
diff --git a/core/modules/system/src/SystemManager.php b/core/modules/system/src/SystemManager.php
index d2e0344..c49b6b1 100644
--- a/core/modules/system/src/SystemManager.php
+++ b/core/modules/system/src/SystemManager.php
@@ -152,7 +152,7 @@ public function getMaxSeverity(&$requirements) {
    * hidden, so we supply the contents of the block.
    *
    * @return array
-   *   A render array suitable for drupal_render.
+   *   A render array suitable for \Drupal::service('renderer')->render.
    */
   public function getBlockContents() {
     // We hard-code the menu name here since otherwise a link in the tools menu
diff --git a/core/modules/system/src/Tests/Common/RenderWebTest.php b/core/modules/system/src/Tests/Common/RenderWebTest.php
index ed0e086..b2d24bf 100644
--- a/core/modules/system/src/Tests/Common/RenderWebTest.php
+++ b/core/modules/system/src/Tests/Common/RenderWebTest.php
@@ -8,7 +8,7 @@
 use Drupal\simpletest\WebTestBase;
 
 /**
- * Performs integration tests on drupal_render().
+ * Performs integration tests on \Drupal::service('renderer')->render().
  *
  * @group Common
  */
diff --git a/core/modules/system/src/Tests/Theme/ThemeTest.php b/core/modules/system/src/Tests/Theme/ThemeTest.php
index 64f330e..2ab80dd 100644
--- a/core/modules/system/src/Tests/Theme/ThemeTest.php
+++ b/core/modules/system/src/Tests/Theme/ThemeTest.php
@@ -237,7 +237,7 @@ public function testDrupalRenderChildren() {
         '#markup' => 'Foo',
       ],
     ];
-    $this->assertThemeOutput('theme_test_render_element_children', $element, 'Foo', 'drupal_render() avoids #theme recursion loop when rendering a render element.');
+    $this->assertThemeOutput('theme_test_render_element_children', $element, 'Foo', '\Drupal::service(\'renderer\')->render() avoids #theme recursion loop when rendering a render element.');
 
     $element = [
       '#theme_wrappers' => ['theme_test_render_element_children'],
@@ -245,7 +245,7 @@ public function testDrupalRenderChildren() {
         '#markup' => 'Foo',
       ],
     ];
-    $this->assertThemeOutput('theme_test_render_element_children', $element, 'Foo', 'drupal_render() avoids #theme_wrappers recursion loop when rendering a render element.');
+    $this->assertThemeOutput('theme_test_render_element_children', $element, 'Foo', '\Drupal::service(\'renderer\')->render() avoids #theme_wrappers recursion loop when rendering a render element.');
   }
 
   /**
diff --git a/core/modules/system/tests/modules/common_test/common_test.module b/core/modules/system/tests/modules/common_test/common_test.module
index 97bba7b..c815a4e 100644
--- a/core/modules/system/tests/modules/common_test/common_test.module
+++ b/core/modules/system/tests/modules/common_test/common_test.module
@@ -129,7 +129,7 @@ function common_test_theme() {
 }
 
 /**
- * Provides a theme function for drupal_render().
+ * Provides a theme function for \Drupal::service('renderer')->render().
  */
 function theme_common_test_foo($variables) {
   return $variables['foo'] . $variables['bar'];
diff --git a/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php b/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php
index 2de84e9..4c02353 100644
--- a/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php
+++ b/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php
@@ -12,7 +12,7 @@ class Test {
    * Renders a page with a title.
    *
    * @return array
-   *   A render array as expected by drupal_render()
+   *   A render array as expected by \Drupal::service('renderer')->render()
    */
   public function renderTitle() {
     $build = [];
@@ -26,7 +26,7 @@ public function renderTitle() {
    * Renders a page.
    *
    * @return array
-   *   A render array as expected by drupal_render().
+   *   A render array as expected by \Drupal::service('renderer')->render().
    */
   public function staticTitle() {
     $build = [];
@@ -63,7 +63,7 @@ public function controllerWithCache() {
    * Returns a generic page render array for title tests.
    *
    * @return array
-   *   A render array as expected by drupal_render()
+   *   A render array as expected by \Drupal::service('renderer')->render()
    */
   public function renderPage() {
     return [
@@ -92,7 +92,7 @@ public function error() {
    * Renders a page with encoded markup.
    *
    * @return array
-   *   A render array as expected by drupal_render()
+   *   A render array as expected by \Drupal::service('renderer')->render()
    */
   public function renderEncodedMarkup() {
     return ['#plain_text' => 'Bad html <script>alert(123);</script>'];
@@ -102,7 +102,7 @@ public function renderEncodedMarkup() {
    * Renders a page with pipe character in link test.
    *
    * @return array
-   *   A render array as expected by drupal_render()
+   *   A render array as expected by \Drupal::service('renderer')->render()
    */
   public function renderPipeInLink() {
     return ['#markup' => '<a href="http://example.com">foo|bar|baz</a>'];
diff --git a/core/modules/system/tests/modules/theme_test/theme_test.module b/core/modules/system/tests/modules/theme_test/theme_test.module
index 2e6f164..741665f 100644
--- a/core/modules/system/tests/modules/theme_test/theme_test.module
+++ b/core/modules/system/tests/modules/theme_test/theme_test.module
@@ -141,10 +141,12 @@ function template_preprocess_theme_test_render_element(&$variables) {
 }
 
 /**
- * Theme function for testing rendering of child elements via drupal_render().
+ * Theme function for testing rendering of child elements via
+ * \Drupal::service('renderer')->render().
  *
  * Theme hooks defining a 'render element' add an internal '#render_children'
- * property. When this property is found, drupal_render() avoids calling
+ * property. When this property is found,
+ * \Drupal::service('renderer')->render() avoids calling
  * the 'theme.manager' service 'render' method on the top-level element to
  * prevent infinite recursion.
  *
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index 4a93989..c570d22 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -195,14 +195,15 @@ function taxonomy_check_vocabulary_hierarchy(VocabularyInterface $vocabulary, $c
  *   content language of the current request.
  *
  * @return array
- *   A $page element suitable for use by drupal_render().
+ *   A $page element suitable for use by \Drupal::service('renderer')->render().
  */
 function taxonomy_term_view(Term $term, $view_mode = 'full', $langcode = NULL) {
   return entity_view($term, $view_mode, $langcode);
 }
 
 /**
- * Constructs a drupal_render() style array from an array of loaded terms.
+ * Constructs a \Drupal::service('renderer')->render() style array from an
+ * array of loaded terms.
  *
  * @param array $terms
  *   An array of taxonomy terms as returned by Term::loadMultiple().
@@ -213,7 +214,7 @@ function taxonomy_term_view(Term $term, $view_mode = 'full', $langcode = NULL) {
  *   content language of the current request.
  *
  * @return array
- *   An array in the format expected by drupal_render().
+ *   An array in the format expected by \Drupal::service('renderer')->render().
  */
 function taxonomy_term_view_multiple(array $terms, $view_mode = 'full', $langcode = NULL) {
   return entity_view_multiple($terms, $view_mode, $langcode);
diff --git a/core/modules/toolbar/src/Element/Toolbar.php b/core/modules/toolbar/src/Element/Toolbar.php
index d92330b..2abe444 100644
--- a/core/modules/toolbar/src/Element/Toolbar.php
+++ b/core/modules/toolbar/src/Element/Toolbar.php
@@ -50,7 +50,8 @@ public function getInfo() {
   }
 
   /**
-   * Builds the Toolbar as a structured array ready for drupal_render().
+   * Builds the Toolbar as a structured array ready for
+   * \Drupal::service('renderer')->render().
    *
    * Since building the toolbar takes some time, it is done just prior to
    * rendering to ensure that it is built only if it will be displayed.
diff --git a/core/modules/toolbar/toolbar.module b/core/modules/toolbar/toolbar.module
index 4791f87..7363b46 100644
--- a/core/modules/toolbar/toolbar.module
+++ b/core/modules/toolbar/toolbar.module
@@ -217,7 +217,7 @@ function toolbar_toolbar() {
  * @return array
  *   The updated renderable array.
  *
- * @see drupal_render()
+ * @see \Drupal::service('renderer')->render()
  */
 function toolbar_prerender_toolbar_administration_tray(array $element) {
   $menu_tree = \Drupal::service('toolbar.menu_tree');
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index b865e95..fbc4bc7 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -893,14 +893,15 @@ function user_delete_multiple(array $uids) {
  *   content language of the current request.
  *
  * @return array
- *   An array as expected by drupal_render().
+ *   An array as expected by \Drupal::service('renderer')->render().
  */
 function user_view($account, $view_mode = 'full', $langcode = NULL) {
   return entity_view($account, $view_mode, $langcode);
 }
 
 /**
- * Constructs a drupal_render() style array from an array of loaded users.
+ * Constructs a \Drupal::service('renderer')->render() style array from an
+ * array of loaded users.
  *
  * @param \Drupal\user\UserInterface[] $accounts
  *   An array of user accounts as returned by User::loadMultiple().
@@ -911,7 +912,7 @@ function user_view($account, $view_mode = 'full', $langcode = NULL) {
  *   content language of the current request.
  *
  * @return array
- *   An array in the format expected by drupal_render().
+ *   An array in the format expected by \Drupal::service('renderer')->render().
  */
 function user_view_multiple($accounts, $view_mode = 'full', $langcode = NULL) {
   return entity_view_multiple($accounts, $view_mode, $langcode);
diff --git a/core/modules/views/src/Plugin/views/field/FieldHandlerInterface.php b/core/modules/views/src/Plugin/views/field/FieldHandlerInterface.php
index 2562b95..95527e1 100644
--- a/core/modules/views/src/Plugin/views/field/FieldHandlerInterface.php
+++ b/core/modules/views/src/Plugin/views/field/FieldHandlerInterface.php
@@ -255,7 +255,8 @@ public function renderText($alter);
   public function getRenderTokens($item);
 
   /**
-   * Passes values to drupal_render() using $this->themeFunctions() as #theme.
+   * Passes values to \Drupal::service('renderer')->render() using
+   * $this->themeFunctions() as #theme.
    *
    * @param \Drupal\views\ResultRow $values
    *   Holds single row of a view's result set.
diff --git a/core/modules/views/views.module b/core/modules/views/views.module
index f6b4f79..cd8d498 100644
--- a/core/modules/views/views.module
+++ b/core/modules/views/views.module
@@ -322,9 +322,9 @@ function views_theme_suggestions_container_alter(array &$suggestions, array $var
  *
  * @param $render_element
  *   The renderable array to which contextual links will be added. This array
- *   should be suitable for passing in to drupal_render() and will normally
- *   contain a representation of the view display whose contextual links are
- *   being requested.
+ *   should be suitable for passing in to \Drupal::service('renderer')->render()
+ *   and will normally contain a representation of the view display whose
+ *   contextual links are being requested.
  * @param $location
  *   The location in which the calling function intends to render the view and
  *   its contextual links. The core system supports three options for this
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityViewBuilderTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityViewBuilderTest.php
index e1537bc..d52bfa1 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityViewBuilderTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityViewBuilderTest.php
@@ -40,7 +40,8 @@ public function testEntityViewBuilderCache() {
     $cache_contexts_manager = \Drupal::service("cache_contexts_manager");
     $cache = \Drupal::cache();
 
-    // Force a request via GET so we can get drupal_render() cache working.
+    // Force a request via GET so we can get
+    // \Drupal::service('renderer')->render() cache working.
     $request = \Drupal::request();
     $request_method = $request->server->get('REQUEST_METHOD');
     $request->setMethod('GET');
@@ -93,7 +94,8 @@ public function testEntityViewBuilderCacheWithReferences() {
     $renderer = $this->container->get('renderer');
     $cache_contexts_manager = \Drupal::service("cache_contexts_manager");
 
-    // Force a request via GET so we can get drupal_render() cache working.
+    // Force a request via GET so we can get
+    // \Drupal::service('renderer')->render() cache working.
     $request = \Drupal::request();
     $request_method = $request->server->get('REQUEST_METHOD');
     $request->setMethod('GET');
diff --git a/core/tests/Drupal/KernelTests/Core/Render/Element/RenderElementTypesTest.php b/core/tests/Drupal/KernelTests/Core/Render/Element/RenderElementTypesTest.php
index 906e74b..0afa28d 100644
--- a/core/tests/Drupal/KernelTests/Core/Render/Element/RenderElementTypesTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Render/Element/RenderElementTypesTest.php
@@ -7,7 +7,8 @@
 use Drupal\KernelTests\KernelTestBase;
 
 /**
- * Tests the markup of core render element types passed to drupal_render().
+ * Tests the markup of core render element types passed to
+ * \Drupal::service('renderer')->render().
  *
  * @group Common
  */
@@ -190,7 +191,7 @@ public function testMoreLink() {
     foreach ($elements as $element) {
       $xml = new \SimpleXMLElement(\Drupal::service('renderer')->renderRoot($element['value']));
       $result = $xml->xpath($element['expected']);
-      $this->assertTrue($result, '"' . $element['name'] . '" input rendered correctly by drupal_render().');
+      $this->assertTrue($result, '"' . $element['name'] . '" input rendered correctly by \Drupal::service(\'renderer\')->render().');
     }
   }
 
@@ -221,7 +222,7 @@ public function testSystemCompactLink() {
     foreach ($elements as $element) {
       $xml = new \SimpleXMLElement(\Drupal::service('renderer')->renderRoot($element['value']));
       $result = $xml->xpath($element['expected']);
-      $this->assertTrue($result, '"' . $element['name'] . '" is rendered correctly by drupal_render().');
+      $this->assertTrue($result, '"' . $element['name'] . '" is rendered correctly by \Drupal::service(\'renderer\')->render().');
     }
 
     // Set admin compact mode on for additional tests.
@@ -237,7 +238,7 @@ public function testSystemCompactLink() {
 
     $xml = new \SimpleXMLElement(\Drupal::service('renderer')->renderRoot($element['value']));
     $result = $xml->xpath($element['expected']);
-    $this->assertTrue($result, '"' . $element['name'] . '" is rendered correctly by drupal_render().');
+    $this->assertTrue($result, '"' . $element['name'] . '" is rendered correctly by \Drupal::service(\'renderer\')->render().');
   }
 
 }
diff --git a/core/tests/Drupal/KernelTests/Core/Render/RenderTest.php b/core/tests/Drupal/KernelTests/Core/Render/RenderTest.php
index a64b553..ae50e0e 100644
--- a/core/tests/Drupal/KernelTests/Core/Render/RenderTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Render/RenderTest.php
@@ -5,7 +5,7 @@
 use Drupal\KernelTests\KernelTestBase;
 
 /**
- * Performs functional tests on drupal_render().
+ * Performs functional tests on \Drupal::service('renderer')->render().
  *
  * @group Common
  */
diff --git a/core/tests/Drupal/Tests/Core/Render/RendererTest.php b/core/tests/Drupal/Tests/Core/Render/RendererTest.php
index 962ba1e..111fffa 100644
--- a/core/tests/Drupal/Tests/Core/Render/RendererTest.php
+++ b/core/tests/Drupal/Tests/Core/Render/RendererTest.php
@@ -393,8 +393,9 @@ public function testRenderSorting() {
     $this->assertTrue($elements['#sorted'], "'#sorted' => TRUE was added to the array");
 
     // Pass $elements through \Drupal\Core\Render\Element::children() and
-    // ensure it remains sorted in the correct order. drupal_render() will
-    // return an empty string if used on the same array in the same request.
+    // ensure it remains sorted in the correct order.
+    // \Drupal::service('renderer')->render() will return an empty string if
+    // used on the same array in the same request.
     $children = Element::children($elements);
     $this->assertTrue(array_shift($children) == 'first', 'Child found in the correct order.');
     $this->assertTrue(array_shift($children) == 'second', 'Child found in the correct order.');
diff --git a/core/tests/Drupal/Tests/EntityViewTrait.php b/core/tests/Drupal/Tests/EntityViewTrait.php
index eb46e97..dcaebe4 100644
--- a/core/tests/Drupal/Tests/EntityViewTrait.php
+++ b/core/tests/Drupal/Tests/EntityViewTrait.php
@@ -15,11 +15,11 @@
    *
    * Entities postpone the composition of their renderable arrays to #pre_render
    * functions in order to maximize cache efficacy. This means that the full
-   * renderable array for an entity is constructed in drupal_render(). Some
-   * tests require the complete renderable array for an entity outside of the
-   * drupal_render process in order to verify the presence of specific values.
-   * This method isolates the steps in the render process that produce an
-   * entity's renderable array.
+   * renderable array for an entity is constructed in
+   * \Drupal::service('renderer')->render(). Some tests require the complete
+   * renderable array for an entity outside of the render process in order to
+   * verify the presence of specific values. This method isolates the steps in
+   * the render process that produce an entity's renderable array.
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity to prepare a renderable array for.
@@ -32,7 +32,7 @@
    *   (optional) Whether to clear the cache for this entity.
    * @return array
    *
-   * @see drupal_render()
+   * @see \Drupal::service('renderer')->render()
    */
   protected function buildEntityView(EntityInterface $entity, $view_mode = 'full', $langcode = NULL, $reset = FALSE) {
     $ensure_fully_built = function(&$elements) use (&$ensure_fully_built) {
diff --git a/core/themes/seven/seven.theme b/core/themes/seven/seven.theme
index 91c03e6..f4e01de 100644
--- a/core/themes/seven/seven.theme
+++ b/core/themes/seven/seven.theme
@@ -26,8 +26,8 @@ function seven_preprocess_html(&$variables) {
  * Implements hook_pre_render_HOOK() for menu-local-tasks templates.
  *
  * Use preprocess hook to set #attached to child elements
- * because they will be processed by Twig and drupal_render will
- * be invoked.
+ * because they will be processed by Twig and
+ * \Drupal::service('renderer')->render will be invoked.
  */
 function seven_preprocess_menu_local_tasks(&$variables) {
   if (!empty($variables['primary'])) {
