diff --git a/core/modules/system/tests/themes/test_basetheme/test_basetheme.theme b/core/modules/system/tests/themes/test_basetheme/test_basetheme.theme
index 739439f..c4cdf68 100644
--- a/core/modules/system/tests/themes/test_basetheme/test_basetheme.theme
+++ b/core/modules/system/tests/themes/test_basetheme/test_basetheme.theme
@@ -17,7 +17,7 @@ function test_basetheme_views_pre_render(ViewExecutable $view) {
 /**
  * Implements hook_views_post_render().
  */
-function test_basetheme_views_post_render(ViewExecutable $view) {
+function test_basetheme_views_post_render(ViewExecutable $view, &$output, $cache) {
   // We append the function name to the title for test to check for.
   $view->setTitle($view->getTitle() . ":" . __FUNCTION__);
 }
diff --git a/core/modules/system/tests/themes/test_subtheme/test_subtheme.theme b/core/modules/system/tests/themes/test_subtheme/test_subtheme.theme
index 0e35910..b2d630d 100644
--- a/core/modules/system/tests/themes/test_subtheme/test_subtheme.theme
+++ b/core/modules/system/tests/themes/test_subtheme/test_subtheme.theme
@@ -18,9 +18,12 @@ function test_subtheme_views_pre_render(ViewExecutable $view) {
 /**
  * Implements hook_views_post_render().
  */
-function test_subtheme_views_post_render(ViewExecutable $view) {
+function test_subtheme_views_post_render(ViewExecutable $view, &$output, $cache) {
   // We append the function name to the title for test to check for.
   $view->setTitle($view->getTitle() . ":" . __FUNCTION__);
+  if ($view->id() == 'test_page_display') {
+    $output['#rows'][0]['#title'] = t('%total_rows items found.', array('%total_rows' => $view->total_rows));
+  }
 }
 
 /**
diff --git a/core/modules/views/src/Tests/ViewsHooksTest.php b/core/modules/views/src/Tests/ViewsHooksTest.php
index 534df07..5b7e4f9 100644
--- a/core/modules/views/src/Tests/ViewsHooksTest.php
+++ b/core/modules/views/src/Tests/ViewsHooksTest.php
@@ -65,11 +65,17 @@ protected function setUp() {
    */
   public function testHooks() {
     $view = Views::getView('test_view');
+    $view->setDisplay();
 
     // Test each hook is found in the implementations array and is invoked.
     foreach (static::$hooks as $hook => $type) {
       $this->assertTrue($this->moduleHandler->implementsHook('views_test_data', $hook), format_string('The hook @hook was registered.', array('@hook' => $hook)));
 
+      if ($hook == 'views_post_render') {
+        $this->moduleHandler->invoke('views_test_data', $hook, array($view, &$view->display_handler->output, $view->display_handler->getPlugin('cache')));
+        continue;
+      }
+
       switch ($type) {
         case 'view':
           $this->moduleHandler->invoke('views_test_data', $hook, array($view));
diff --git a/core/modules/views/src/Tests/ViewsThemeIntegrationTest.php b/core/modules/views/src/Tests/ViewsThemeIntegrationTest.php
index 91de60c..42062f4 100644
--- a/core/modules/views/src/Tests/ViewsThemeIntegrationTest.php
+++ b/core/modules/views/src/Tests/ViewsThemeIntegrationTest.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\views\Tests;
 
+use Drupal\Component\Utility\SafeMarkup;
+
 /**
  * Tests the Views theme integration.
  *
@@ -74,11 +76,13 @@ public function testThemedViewPage() {
     // Make sure a views rendered page is touched.
     $this->drupalGet('test_page_display_200');
 
-    $this->assertRaw("test_subtheme_views_pre_render", "Views title changed by test_usetheme.test_subtheme_views_pre_render");
-    $this->assertRaw("test_subtheme_views_post_render", "Views title changed by test_usetheme.test_subtheme_views_post_render");
+    $this->assertRaw("test_subtheme_views_pre_render", "Views title changed by test_subtheme.test_subtheme_views_pre_render");
+    $this->assertRaw("test_subtheme_views_post_render", "Views title changed by test_subtheme.test_subtheme_views_post_render");
 
     $this->assertRaw("test_basetheme_views_pre_render", "Views title changed by test_basetheme.test_basetheme_views_pre_render");
     $this->assertRaw("test_basetheme_views_post_render", "Views title changed by test_basetheme.test_basetheme_views_post_render");
+
+    $this->assertRaw(SafeMarkup::format("%total_rows items found.", array("%total_rows" => count($this->dataSet()))), "Views group title added by test_subtheme.test_subtheme_views_post_render");
   }
 
 }
diff --git a/core/modules/views/src/ViewExecutable.php b/core/modules/views/src/ViewExecutable.php
index 774e63c..532de27 100644
--- a/core/modules/views/src/ViewExecutable.php
+++ b/core/modules/views/src/ViewExecutable.php
@@ -1442,7 +1442,7 @@ public function render($display_id = NULL) {
     foreach ($themes as $theme_name) {
       $function = $theme_name . '_views_post_render';
       if (function_exists($function)) {
-        $function($this);
+        $function($this, $this->display_handler->output, $cache);
       }
     }
 
diff --git a/core/modules/views/tests/modules/views_test_data/views_test_data.views_execution.inc b/core/modules/views/tests/modules/views_test_data/views_test_data.views_execution.inc
index 1698495..ba37a26 100644
--- a/core/modules/views/tests/modules/views_test_data/views_test_data.views_execution.inc
+++ b/core/modules/views/tests/modules/views_test_data/views_test_data.views_execution.inc
@@ -66,7 +66,7 @@ function views_test_data_placeholders() {
 /**
  * Implements hook_views_post_render().
  */
-function views_test_data_views_post_render(ViewExecutable $view) {
+function views_test_data_views_post_render(ViewExecutable $view, &$output, $cache) {
   \Drupal::state()->set('views_hook_test_views_post_render', TRUE);
 }
 
