From f761c82c94f27193bfb6cd0648e11e491eda4880 Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Fri, 29 Jan 2021 12:33:47 +0800
Subject: [PATCH] Fix load time bug (#14508)

---
 modules/context/context.go | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/modules/context/context.go b/modules/context/context.go
index adae562c0a..210365f0b1 100644
--- a/modules/context/context.go
+++ b/modules/context/context.go
@@ -10,6 +10,7 @@ import (
 	"crypto/sha256"
 	"encoding/hex"
 	"encoding/json"
+	"fmt"
 	"html"
 	"html/template"
 	"io"
@@ -182,6 +183,10 @@ func (ctx *Context) RedirectToFirst(location ...string) {
 // HTML calls Context.HTML and converts template name to string.
 func (ctx *Context) HTML(status int, name base.TplName) {
 	log.Debug("Template: %s", name)
+	var startTime = time.Now()
+	ctx.Data["TmplLoadTimes"] = func() string {
+		return fmt.Sprint(time.Since(startTime).Nanoseconds()/1e6) + "ms"
+	}
 	if err := ctx.Render.HTML(ctx.Resp, status, string(name), ctx.Data); err != nil {
 		ctx.ServerError("Render failed", err)
 	}
@@ -190,6 +195,10 @@ func (ctx *Context) HTML(status int, name base.TplName) {
 // HTMLString render content to a string but not http.ResponseWriter
 func (ctx *Context) HTMLString(name string, data interface{}) (string, error) {
 	var buf strings.Builder
+	var startTime = time.Now()
+	ctx.Data["TmplLoadTimes"] = func() string {
+		return fmt.Sprint(time.Since(startTime).Nanoseconds()/1e6) + "ms"
+	}
 	err := ctx.Render.HTML(&buf, 200, string(name), data)
 	return buf.String(), err
 }
@@ -547,10 +556,7 @@ func Contexter() func(next http.Handler) http.Handler {
 				Data: map[string]interface{}{
 					"CurrentURL":    setting.AppSubURL + req.URL.RequestURI(),
 					"PageStartTime": startTime,
-					"TmplLoadTimes": func() string {
-						return time.Since(startTime).String()
-					},
-					"Link": link,
+					"Link":          link,
 				},
 			}