Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(175)

Side by Side Diff: experimental/webtry/webtry.go

Issue 639833003: preliminary support for fiddle font use (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « experimental/webtry/templates/template.gyp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 package main 1 package main
2 2
3 import ( 3 import (
4 "bytes" 4 "bytes"
5 "crypto/md5" 5 "crypto/md5"
6 "database/sql" 6 "database/sql"
7 "encoding/base64" 7 "encoding/base64"
8 "encoding/binary" 8 "encoding/binary"
9 "encoding/json" 9 "encoding/json"
10 "flag" 10 "flag"
(...skipping 18 matching lines...) Expand all
29 ) 29 )
30 30
31 import ( 31 import (
32 "github.com/fiorix/go-web/autogzip" 32 "github.com/fiorix/go-web/autogzip"
33 _ "github.com/go-sql-driver/mysql" 33 _ "github.com/go-sql-driver/mysql"
34 _ "github.com/mattn/go-sqlite3" 34 _ "github.com/mattn/go-sqlite3"
35 "github.com/rcrowley/go-metrics" 35 "github.com/rcrowley/go-metrics"
36 ) 36 )
37 37
38 const ( 38 const (
39
40 DEFAULT_SAMPLE = `void draw(SkCanvas* canvas) { 39 DEFAULT_SAMPLE = `void draw(SkCanvas* canvas) {
41 SkPaint p; 40 SkPaint p;
42 p.setColor(SK_ColorRED); 41 p.setColor(SK_ColorRED);
43 p.setAntiAlias(true); 42 p.setAntiAlias(true);
44 p.setStyle(SkPaint::kStroke_Style); 43 p.setStyle(SkPaint::kStroke_Style);
45 p.setStrokeWidth(10); 44 p.setStrokeWidth(10);
46 45
47 canvas->drawLine(20, 20, 100, 100, p); 46 canvas->drawLine(20, 20, 100, 100, p);
48 }` 47 }`
49 // Don't increase above 2^16 w/o altering the db tables to accept someth ing bigger than TEXT. 48 // Don't increase above 2^16 w/o altering the db tables to accept someth ing bigger than TEXT.
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 return t.Execute(f, context) 360 return t.Execute(f, context)
362 } 361 }
363 362
364 // expandToFile expands the template and writes the result to the file. 363 // expandToFile expands the template and writes the result to the file.
365 func expandToFile(filename string, code string, t *template.Template) error { 364 func expandToFile(filename string, code string, t *template.Template) error {
366 return writeTemplate(filename, t, userCode{Code: code, Titlebar: Titleba r{GitHash: gitHash, GitInfo: gitInfo}}) 365 return writeTemplate(filename, t, userCode{Code: code, Titlebar: Titleba r{GitHash: gitHash, GitInfo: gitInfo}})
367 } 366 }
368 367
369 // expandCode expands the template into a file and calculates the MD5 hash. 368 // expandCode expands the template into a file and calculates the MD5 hash.
370 func expandCode(code string, source int) (string, error) { 369 func expandCode(code string, source int) (string, error) {
370 // in order to support fonts in the chroot jail, we need to make sure
371 // we're using portable typefaces.
372 // TODO(humper): Make this more robust, supporting things like setTypef ace
373
374 inputCodeLines := strings.Split(code, "\n")
375 outputCodeLines := []string{}
376 for _, line := range inputCodeLines {
377 outputCodeLines = append(outputCodeLines, line)
378 if strings.HasPrefix(strings.TrimSpace(line), "SkPaint ") {
379 outputCodeLines = append(outputCodeLines, "sk_tool_utils ::set_portable_typeface(&p);")
380 }
381 }
382
383 fontFriendlyCode := strings.Join(outputCodeLines, "\n")
384
371 h := md5.New() 385 h := md5.New()
372 » h.Write([]byte(code)) 386 » h.Write([]byte(fontFriendlyCode))
373 binary.Write(h, binary.LittleEndian, int64(source)) 387 binary.Write(h, binary.LittleEndian, int64(source))
374 hash := fmt.Sprintf("%x", h.Sum(nil)) 388 hash := fmt.Sprintf("%x", h.Sum(nil))
375 // At this point we are running in skia/experimental/webtry, making cach e a 389 // At this point we are running in skia/experimental/webtry, making cach e a
376 // peer directory to skia. 390 // peer directory to skia.
377 // TODO(jcgregorio) Make all relative directories into flags. 391 // TODO(jcgregorio) Make all relative directories into flags.
378 » err := expandToFile(fmt.Sprintf("../../../cache/src/%s.cpp", hash), code , codeTemplate) 392 » err := expandToFile(fmt.Sprintf("../../../cache/src/%s.cpp", hash), font FriendlyCode, codeTemplate)
379 return hash, err 393 return hash, err
380 } 394 }
381 395
382 // expandGyp produces the GYP file needed to build the code 396 // expandGyp produces the GYP file needed to build the code
383 func expandGyp(hash string) error { 397 func expandGyp(hash string) error {
384 return writeTemplate(fmt.Sprintf("../../../cache/%s.gyp", hash), gypTemp late, struct{ Hash string }{hash}) 398 return writeTemplate(fmt.Sprintf("../../../cache/%s.gyp", hash), gypTemp late, struct{ Hash string }{hash})
385 } 399 }
386 400
387 // response is serialized to JSON as a response to POSTs. 401 // response is serialized to JSON as a response to POSTs.
388 type response struct { 402 type response struct {
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 } 824 }
811 writeToDatabase(hash, request.Code, request.Name, request.Source ) 825 writeToDatabase(hash, request.Code, request.Name, request.Source )
812 err = expandGyp(hash) 826 err = expandGyp(hash)
813 if err != nil { 827 if err != nil {
814 reportTryError(w, r, err, "Failed to write the gyp file. ", hash) 828 reportTryError(w, r, err, "Failed to write the gyp file. ", hash)
815 return 829 return
816 } 830 }
817 cmd := "scripts/fiddle_wrapper " + hash 831 cmd := "scripts/fiddle_wrapper " + hash
818 if *useChroot { 832 if *useChroot {
819 cmd = "schroot -c webtry --directory=/ -- /skia_build/sk ia/experimental/webtry/" + cmd 833 cmd = "schroot -c webtry --directory=/ -- /skia_build/sk ia/experimental/webtry/" + cmd
820 » » } 834 » » }
821 if request.Source > 0 { 835 if request.Source > 0 {
822 cmd += fmt.Sprintf(" image-%d.png", request.Source) 836 cmd += fmt.Sprintf(" image-%d.png", request.Source)
823 } 837 }
824 838
825 message, err := doCmd(cmd) 839 message, err := doCmd(cmd)
826 if err != nil { 840 if err != nil {
827 reportTryError(w, r, err, "Failed to run the code:\n"+me ssage, hash) 841 reportTryError(w, r, err, "Failed to run the code:\n"+me ssage, hash)
828 return 842 return
829 } 843 }
830 png, err := ioutil.ReadFile("../../../inout/" + hash + ".png") 844 png, err := ioutil.ReadFile("../../../inout/" + hash + ".png")
(...skipping 27 matching lines...) Expand all
858 http.HandleFunc("/sources/", autogzip.HandleFunc(sourcesHandler)) 872 http.HandleFunc("/sources/", autogzip.HandleFunc(sourcesHandler))
859 873
860 // Resources are served directly 874 // Resources are served directly
861 // TODO add support for caching/etags/gzip 875 // TODO add support for caching/etags/gzip
862 http.Handle("/res/", autogzip.Handle(http.FileServer(http.Dir("./")))) 876 http.Handle("/res/", autogzip.Handle(http.FileServer(http.Dir("./"))))
863 877
864 // TODO Break out /c/ as it's own handler. 878 // TODO Break out /c/ as it's own handler.
865 http.HandleFunc("/", autogzip.HandleFunc(mainHandler)) 879 http.HandleFunc("/", autogzip.HandleFunc(mainHandler))
866 log.Fatal(http.ListenAndServe(*port, nil)) 880 log.Fatal(http.ListenAndServe(*port, nil))
867 } 881 }
OLDNEW
« no previous file with comments | « experimental/webtry/templates/template.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698