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

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

Issue 685543002: remove the GPU checkbox from the hash / database (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 1 month 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/sidebar.html ('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 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 if err != nil { 237 if err != nil {
238 glog.Errorf("Creating source_images table failed: %s", e rr) 238 glog.Errorf("Creating source_images table failed: %s", e rr)
239 } 239 }
240 240
241 sql = `CREATE TABLE IF NOT EXISTS webtry ( 241 sql = `CREATE TABLE IF NOT EXISTS webtry (
242 code TEXT DEFAULT '' NOT NULL, 242 code TEXT DEFAULT '' NOT NULL,
243 create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, 243 create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
244 hash CHAR(64) DEFAULT '' NOT NULL, 244 hash CHAR(64) DEFAULT '' NOT NULL,
245 width INTEGER DEFAULT 256 NOT NULL, 245 width INTEGER DEFAULT 256 NOT NULL,
246 height INTEGER DEFAULT 256 NOT NULL, 246 height INTEGER DEFAULT 256 NOT NULL,
247 gpu BOOL DEFAULT 0 NOT NULL,
248 source_image_id INTEGER DEFAULT 0 NOT NULL, 247 source_image_id INTEGER DEFAULT 0 NOT NULL,
249 248
250 PRIMARY KEY(hash) 249 PRIMARY KEY(hash)
251 )` 250 )`
252 _, err = db.Exec(sql) 251 _, err = db.Exec(sql)
253 if err != nil { 252 if err != nil {
254 glog.Errorf("Creating webtry table failed: %s", err) 253 glog.Errorf("Creating webtry table failed: %s", err)
255 } 254 }
256 255
257 sql = `CREATE TABLE IF NOT EXISTS workspace ( 256 sql = `CREATE TABLE IF NOT EXISTS workspace (
258 name CHAR(64) DEFAULT '' NOT NULL, 257 name CHAR(64) DEFAULT '' NOT NULL,
259 create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, 258 create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
260 PRIMARY KEY(name) 259 PRIMARY KEY(name)
261 )` 260 )`
262 _, err = db.Exec(sql) 261 _, err = db.Exec(sql)
263 if err != nil { 262 if err != nil {
264 glog.Errorf("Creating workspace table failed: %s", err) 263 glog.Errorf("Creating workspace table failed: %s", err)
265 } 264 }
266 265
267 sql = `CREATE TABLE IF NOT EXISTS workspacetry ( 266 sql = `CREATE TABLE IF NOT EXISTS workspacetry (
268 name CHAR(64) DEFAULT '' NOT NULL, 267 name CHAR(64) DEFAULT '' NOT NULL,
269 create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, 268 create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
270 hash CHAR(64) DEFAULT '' NOT NULL, 269 hash CHAR(64) DEFAULT '' NOT NULL,
271 width INTEGER DEFAULT 256 NOT NULL, 270 width INTEGER DEFAULT 256 NOT NULL,
272 height INTEGER DEFAULT 256 NOT NULL, 271 height INTEGER DEFAULT 256 NOT NULL,
273 gpu BOOL DEFAULT 0 NOT NULL,
274 hidden INTEGER DEFAULT 0 NOT NULL, 272 hidden INTEGER DEFAULT 0 NOT NULL,
275 source_image_id INTEGER DEFAULT 0 NOT NULL, 273 source_image_id INTEGER DEFAULT 0 NOT NULL,
276 274
277 FOREIGN KEY (name) REFERENCES workspace(name) 275 FOREIGN KEY (name) REFERENCES workspace(name)
278 )` 276 )`
279 _, err = db.Exec(sql) 277 _, err = db.Exec(sql)
280 if err != nil { 278 if err != nil {
281 glog.Errorf("Creating workspacetry table failed: %s", er r) 279 glog.Errorf("Creating workspacetry table failed: %s", er r)
282 } 280 }
283 } 281 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 GitHash string 334 GitHash string
337 GitInfo string 335 GitInfo string
338 } 336 }
339 337
340 // userCode is used in template expansion. 338 // userCode is used in template expansion.
341 type userCode struct { 339 type userCode struct {
342 Code string 340 Code string
343 Hash string 341 Hash string
344 Width int 342 Width int
345 Height int 343 Height int
346 GPU bool
347 Source int 344 Source int
348 Titlebar Titlebar 345 Titlebar Titlebar
349 } 346 }
350 347
351 // writeTemplate creates a given output file and writes the template 348 // writeTemplate creates a given output file and writes the template
352 // result there. 349 // result there.
353 func writeTemplate(filename string, t *template.Template, context interface{}) e rror { 350 func writeTemplate(filename string, t *template.Template, context interface{}) e rror {
354 f, err := os.Create(filename) 351 f, err := os.Create(filename)
355 if err != nil { 352 if err != nil {
356 return err 353 return err
357 } 354 }
358 defer f.Close() 355 defer f.Close()
359 return t.Execute(f, context) 356 return t.Execute(f, context)
360 } 357 }
361 358
362 // expandToFile expands the template and writes the result to the file. 359 // expandToFile expands the template and writes the result to the file.
363 func expandToFile(filename string, code string, t *template.Template) error { 360 func expandToFile(filename string, code string, t *template.Template) error {
364 return writeTemplate(filename, t, userCode{ 361 return writeTemplate(filename, t, userCode{
365 Code: code, 362 Code: code,
366 Titlebar: Titlebar{GitHash: gitHash, GitInfo: gitInfo}, 363 Titlebar: Titlebar{GitHash: gitHash, GitInfo: gitInfo},
367 }) 364 })
368 } 365 }
369 366
370 // expandCode expands the template into a file and calculates the MD5 hash. 367 // expandCode expands the template into a file and calculates the MD5 hash.
371 // We include the width and height here so that a single hash can capture 368 // We include the width and height here so that a single hash can capture
372 // both the code and the supplied width/height parameters. 369 // both the code and the supplied width/height parameters.
373 func expandCode(code string, source int, width, height int, gpu bool) (string, e rror) { 370 func expandCode(code string, source int, width, height int) (string, error) {
374 // in order to support fonts in the chroot jail, we need to make sure 371 // in order to support fonts in the chroot jail, we need to make sure
375 // we're using portable typefaces. 372 // we're using portable typefaces.
376 // TODO(humper): Make this more robust, supporting things like setTypef ace 373 // TODO(humper): Make this more robust, supporting things like setTypef ace
377 374
378 inputCodeLines := strings.Split(code, "\n") 375 inputCodeLines := strings.Split(code, "\n")
379 outputCodeLines := []string{ 376 outputCodeLines := []string{
380 "DECLARE_bool(portableFonts);", 377 "DECLARE_bool(portableFonts);",
381 fmt.Sprintf("// WxH: %d, %d", width, height), 378 fmt.Sprintf("// WxH: %d, %d", width, height),
382 fmt.Sprintf("// GPU: %v", gpu),
383 } 379 }
384 for _, line := range inputCodeLines { 380 for _, line := range inputCodeLines {
385 outputCodeLines = append(outputCodeLines, line) 381 outputCodeLines = append(outputCodeLines, line)
386 if strings.HasPrefix(strings.TrimSpace(line), "SkPaint p") { 382 if strings.HasPrefix(strings.TrimSpace(line), "SkPaint p") {
387 outputCodeLines = append(outputCodeLines, "FLAGS_portabl eFonts = true;") 383 outputCodeLines = append(outputCodeLines, "FLAGS_portabl eFonts = true;")
388 outputCodeLines = append(outputCodeLines, "sk_tool_utils ::set_portable_typeface(&p, \"Helvetica\", SkTypeface::kNormal);") 384 outputCodeLines = append(outputCodeLines, "sk_tool_utils ::set_portable_typeface(&p, \"Helvetica\", SkTypeface::kNormal);")
389 } 385 }
390 } 386 }
391 387
392 fontFriendlyCode := strings.Join(outputCodeLines, "\n") 388 fontFriendlyCode := strings.Join(outputCodeLines, "\n")
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 resp, err := json.Marshal(m) 465 resp, err := json.Marshal(m)
470 466
471 if err != nil { 467 if err != nil {
472 http.Error(w, "Failed to serialize a response", 500) 468 http.Error(w, "Failed to serialize a response", 500)
473 return 469 return
474 } 470 }
475 w.Header().Set("Content-Type", "text/plain") 471 w.Header().Set("Content-Type", "text/plain")
476 w.Write(resp) 472 w.Write(resp)
477 } 473 }
478 474
479 func writeToDatabase(hash string, code string, workspaceName string, source int, width, height int, gpu bool) { 475 func writeToDatabase(hash string, code string, workspaceName string, source int, width, height int) {
480 if db == nil { 476 if db == nil {
481 return 477 return
482 } 478 }
483 » if _, err := db.Exec("INSERT INTO webtry (code, hash, width, height, gpu , source_image_id) VALUES(?, ?, ?, ?, ?, ?)", code, hash, width, height, gpu, so urce); err != nil { 479 » if _, err := db.Exec("INSERT INTO webtry (code, hash, width, height, sou rce_image_id) VALUES(?, ?, ?, ?, ?)", code, hash, width, height, source); err != nil {
484 glog.Errorf("Failed to insert code into database: %q\n", err) 480 glog.Errorf("Failed to insert code into database: %q\n", err)
485 } 481 }
486 if workspaceName != "" { 482 if workspaceName != "" {
487 » » if _, err := db.Exec("INSERT INTO workspacetry (name, hash, widt h, height, gpu, source_image_id) VALUES(?, ?, ?, ?, ?, ?)", workspaceName, hash, width, height, gpu, source); err != nil { 483 » » if _, err := db.Exec("INSERT INTO workspacetry (name, hash, widt h, height, source_image_id) VALUES(?, ?, ?, ?, ?)", workspaceName, hash, width, height, source); err != nil {
488 glog.Errorf("Failed to insert into workspacetry table: % q\n", err) 484 glog.Errorf("Failed to insert into workspacetry table: % q\n", err)
489 } 485 }
490 } 486 }
491 } 487 }
492 488
493 type Sources struct { 489 type Sources struct {
494 Id int `json:"id"` 490 Id int `json:"id"`
495 } 491 }
496 492
497 // sourcesHandler serves up the PNG of a specific try. 493 // sourcesHandler serves up the PNG of a specific try.
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 } 616 }
621 } 617 }
622 618
623 type Workspace struct { 619 type Workspace struct {
624 Name string 620 Name string
625 Code string 621 Code string
626 Hash string 622 Hash string
627 Width int 623 Width int
628 Height int 624 Height int
629 Source int 625 Source int
630 GPU bool
631 Tries []Try 626 Tries []Try
632 Titlebar Titlebar 627 Titlebar Titlebar
633 } 628 }
634 629
635 // newWorkspace generates a new random workspace name and stores it in the datab ase. 630 // newWorkspace generates a new random workspace name and stores it in the datab ase.
636 func newWorkspace() (string, error) { 631 func newWorkspace() (string, error) {
637 for i := 0; i < 10; i++ { 632 for i := 0; i < 10; i++ {
638 adj := workspaceNameAdj[rand.Intn(len(workspaceNameAdj))] 633 adj := workspaceNameAdj[rand.Intn(len(workspaceNameAdj))]
639 noun := workspaceNameNoun[rand.Intn(len(workspaceNameNoun))] 634 noun := workspaceNameNoun[rand.Intn(len(workspaceNameNoun))]
640 suffix := rand.Intn(1000) 635 suffix := rand.Intn(1000)
641 name := fmt.Sprintf("%s-%s-%d", adj, noun, suffix) 636 name := fmt.Sprintf("%s-%s-%d", adj, noun, suffix)
642 if _, err := db.Exec("INSERT INTO workspace (name) VALUES(?)", n ame); err == nil { 637 if _, err := db.Exec("INSERT INTO workspace (name) VALUES(?)", n ame); err == nil {
643 return name, nil 638 return name, nil
644 } else { 639 } else {
645 glog.Errorf("Failed to insert workspace into database: % q\n", err) 640 glog.Errorf("Failed to insert workspace into database: % q\n", err)
646 } 641 }
647 } 642 }
648 return "", fmt.Errorf("Failed to create a new workspace") 643 return "", fmt.Errorf("Failed to create a new workspace")
649 } 644 }
650 645
651 // getCode returns the code for a given hash, or the empty string if not found. 646 // getCode returns the code for a given hash, or the empty string if not found.
652 func getCode(hash string) (string, int, int, int, bool, error) { 647 func getCode(hash string) (string, int, int, int, error) {
653 code := "" 648 code := ""
654 width := 0 649 width := 0
655 height := 0 650 height := 0
656 source := 0 651 source := 0
657 » gpu := false 652 » if err := db.QueryRow("SELECT code, width, height, source_image_id FROM webtry WHERE hash=?", hash).Scan(&code, &width, &height, &source); err != nil {
658 » if err := db.QueryRow("SELECT code, width, height, gpu, source_image_id FROM webtry WHERE hash=?", hash).Scan(&code, &width, &height, &gpu, &source); er r != nil {
659 glog.Errorf("Code for hash is missing: %q\n", err) 653 glog.Errorf("Code for hash is missing: %q\n", err)
660 » » return code, width, height, source, gpu, err 654 » » return code, width, height, source, err
661 } 655 }
662 » return code, width, height, source, gpu, nil 656 » return code, width, height, source, nil
663 } 657 }
664 658
665 func workspaceHandler(w http.ResponseWriter, r *http.Request) { 659 func workspaceHandler(w http.ResponseWriter, r *http.Request) {
666 glog.Infof("Workspace Handler: %q\n", r.URL.Path) 660 glog.Infof("Workspace Handler: %q\n", r.URL.Path)
667 if r.Method == "GET" { 661 if r.Method == "GET" {
668 tries := []Try{} 662 tries := []Try{}
669 match := workspaceLink.FindStringSubmatch(r.URL.Path) 663 match := workspaceLink.FindStringSubmatch(r.URL.Path)
670 name := "" 664 name := ""
671 if len(match) == 2 { 665 if len(match) == 2 {
672 name = match[1] 666 name = match[1]
(...skipping 12 matching lines...) Expand all
685 continue 679 continue
686 } 680 }
687 tries = append(tries, Try{Hash: hash, Source: so urce, CreateTS: create_ts.Format("2006-02-01")}) 681 tries = append(tries, Try{Hash: hash, Source: so urce, CreateTS: create_ts.Format("2006-02-01")})
688 } 682 }
689 } 683 }
690 var code string 684 var code string
691 var hash string 685 var hash string
692 var width int 686 var width int
693 var height int 687 var height int
694 source := 0 688 source := 0
695 gpu := false
696 if len(tries) == 0 { 689 if len(tries) == 0 {
697 code = DEFAULT_SAMPLE 690 code = DEFAULT_SAMPLE
698 width = 256 691 width = 256
699 height = 256 692 height = 256
700 } else { 693 } else {
701 hash = tries[len(tries)-1].Hash 694 hash = tries[len(tries)-1].Hash
702 » » » code, width, height, source, gpu, _ = getCode(hash) 695 » » » code, width, height, source, _ = getCode(hash)
703 } 696 }
704 w.Header().Set("Content-Type", "text/html") 697 w.Header().Set("Content-Type", "text/html")
705 » » if err := workspaceTemplate.Execute(w, Workspace{Tries: tries, C ode: code, Name: name, Hash: hash, Width: width, Height: height, GPU: gpu, Sourc e: source, Titlebar: Titlebar{GitHash: gitHash, GitInfo: gitInfo}}); err != nil { 698 » » if err := workspaceTemplate.Execute(w, Workspace{Tries: tries, C ode: code, Name: name, Hash: hash, Width: width, Height: height, Source: source, Titlebar: Titlebar{GitHash: gitHash, GitInfo: gitInfo}}); err != nil {
706 glog.Errorf("Failed to expand template: %q\n", err) 699 glog.Errorf("Failed to expand template: %q\n", err)
707 } 700 }
708 } else if r.Method == "POST" { 701 } else if r.Method == "POST" {
709 name, err := newWorkspace() 702 name, err := newWorkspace()
710 if err != nil { 703 if err != nil {
711 http.Error(w, "Failed to create a new workspace.", 500) 704 http.Error(w, "Failed to create a new workspace.", 500)
712 return 705 return
713 } 706 }
714 http.Redirect(w, r, "/w/"+name, 302) 707 http.Redirect(w, r, "/w/"+name, 302)
715 } 708 }
(...skipping 30 matching lines...) Expand all
746 if len(match) != 2 { 739 if len(match) != 2 {
747 http.NotFound(w, r) 740 http.NotFound(w, r)
748 return 741 return
749 } 742 }
750 hash := match[1] 743 hash := match[1]
751 if db == nil { 744 if db == nil {
752 http.NotFound(w, r) 745 http.NotFound(w, r)
753 return 746 return
754 } 747 }
755 var code string 748 var code string
756 » code, width, height, source, gpu, err := getCode(hash) 749 » code, width, height, source, err := getCode(hash)
757 if err != nil { 750 if err != nil {
758 http.NotFound(w, r) 751 http.NotFound(w, r)
759 return 752 return
760 } 753 }
761 // Expand the template. 754 // Expand the template.
762 w.Header().Set("Content-Type", "text/html") 755 w.Header().Set("Content-Type", "text/html")
763 » if err := iframeTemplate.Execute(w, userCode{Code: code, Width: width, H eight: height, GPU: gpu, Hash: hash, Source: source}); err != nil { 756 » if err := iframeTemplate.Execute(w, userCode{Code: code, Width: width, H eight: height, Hash: hash, Source: source}); err != nil {
764 glog.Errorf("Failed to expand template: %q\n", err) 757 glog.Errorf("Failed to expand template: %q\n", err)
765 } 758 }
766 } 759 }
767 760
768 type TryInfo struct { 761 type TryInfo struct {
769 Hash string `json:"hash"` 762 Hash string `json:"hash"`
770 Code string `json:"code"` 763 Code string `json:"code"`
771 Width int `json:"width"` 764 Width int `json:"width"`
772 Height int `json:"height"` 765 Height int `json:"height"`
773 GPU bool `json:"gpu"`
774 Source int `json:"source"` 766 Source int `json:"source"`
775 } 767 }
776 768
777 // tryInfoHandler returns information about a specific try. 769 // tryInfoHandler returns information about a specific try.
778 func tryInfoHandler(w http.ResponseWriter, r *http.Request) { 770 func tryInfoHandler(w http.ResponseWriter, r *http.Request) {
779 glog.Infof("Try Info Handler: %q\n", r.URL.Path) 771 glog.Infof("Try Info Handler: %q\n", r.URL.Path)
780 if r.Method != "GET" { 772 if r.Method != "GET" {
781 http.NotFound(w, r) 773 http.NotFound(w, r)
782 return 774 return
783 } 775 }
784 match := tryInfoLink.FindStringSubmatch(r.URL.Path) 776 match := tryInfoLink.FindStringSubmatch(r.URL.Path)
785 if len(match) != 2 { 777 if len(match) != 2 {
786 http.NotFound(w, r) 778 http.NotFound(w, r)
787 return 779 return
788 } 780 }
789 hash := match[1] 781 hash := match[1]
790 » code, width, height, source, gpu, err := getCode(hash) 782 » code, width, height, source, err := getCode(hash)
791 if err != nil { 783 if err != nil {
792 http.NotFound(w, r) 784 http.NotFound(w, r)
793 return 785 return
794 } 786 }
795 m := TryInfo{ 787 m := TryInfo{
796 Hash: hash, 788 Hash: hash,
797 Code: code, 789 Code: code,
798 Width: width, 790 Width: width,
799 Height: height, 791 Height: height,
800 GPU: gpu,
801 Source: source, 792 Source: source,
802 } 793 }
803 resp, err := json.Marshal(m) 794 resp, err := json.Marshal(m)
804 if err != nil { 795 if err != nil {
805 reportError(w, r, err, "Failed to serialize a response.") 796 reportError(w, r, err, "Failed to serialize a response.")
806 return 797 return
807 } 798 }
808 w.Header().Set("Content-Type", "application/json") 799 w.Header().Set("Content-Type", "application/json")
809 w.Write(resp) 800 w.Write(resp)
810 } 801 }
(...skipping 12 matching lines...) Expand all
823 814
824 // mainHandler handles the GET and POST of the main page. 815 // mainHandler handles the GET and POST of the main page.
825 func mainHandler(w http.ResponseWriter, r *http.Request) { 816 func mainHandler(w http.ResponseWriter, r *http.Request) {
826 glog.Infof("Main Handler: %q\n", r.URL.Path) 817 glog.Infof("Main Handler: %q\n", r.URL.Path)
827 requestsCounter.Inc(1) 818 requestsCounter.Inc(1)
828 if r.Method == "GET" { 819 if r.Method == "GET" {
829 code := DEFAULT_SAMPLE 820 code := DEFAULT_SAMPLE
830 source := 0 821 source := 0
831 width := 256 822 width := 256
832 height := 256 823 height := 256
833 gpu := false
834 match := directLink.FindStringSubmatch(r.URL.Path) 824 match := directLink.FindStringSubmatch(r.URL.Path)
835 var hash string 825 var hash string
836 if len(match) == 2 && r.URL.Path != "/" { 826 if len(match) == 2 && r.URL.Path != "/" {
837 hash = match[1] 827 hash = match[1]
838 if db == nil { 828 if db == nil {
839 http.NotFound(w, r) 829 http.NotFound(w, r)
840 return 830 return
841 } 831 }
842 // Update 'code' with the code found in the database. 832 // Update 'code' with the code found in the database.
843 » » » if err := db.QueryRow("SELECT code, width, height, gpu, source_image_id FROM webtry WHERE hash=?", hash).Scan(&code, &width, &height, &g pu, &source); err != nil { 833 » » » if err := db.QueryRow("SELECT code, width, height, sourc e_image_id FROM webtry WHERE hash=?", hash).Scan(&code, &width, &height, &source ); err != nil {
844 http.NotFound(w, r) 834 http.NotFound(w, r)
845 return 835 return
846 } 836 }
847 } 837 }
848 // Expand the template. 838 // Expand the template.
849 w.Header().Set("Content-Type", "text/html") 839 w.Header().Set("Content-Type", "text/html")
850 » » if err := indexTemplate.Execute(w, userCode{Code: code, Hash: ha sh, Source: source, Width: width, Height: height, GPU: gpu, Titlebar: Titlebar{G itHash: gitHash, GitInfo: gitInfo}}); err != nil { 840 » » if err := indexTemplate.Execute(w, userCode{Code: code, Hash: ha sh, Source: source, Width: width, Height: height, Titlebar: Titlebar{GitHash: gi tHash, GitInfo: gitInfo}}); err != nil {
851 glog.Errorf("Failed to expand template: %q\n", err) 841 glog.Errorf("Failed to expand template: %q\n", err)
852 } 842 }
853 } else if r.Method == "POST" { 843 } else if r.Method == "POST" {
854 w.Header().Set("Content-Type", "application/json") 844 w.Header().Set("Content-Type", "application/json")
855 buf := bytes.NewBuffer(make([]byte, 0, MAX_TRY_SIZE)) 845 buf := bytes.NewBuffer(make([]byte, 0, MAX_TRY_SIZE))
856 n, err := buf.ReadFrom(r.Body) 846 n, err := buf.ReadFrom(r.Body)
857 if err != nil { 847 if err != nil {
858 reportTryError(w, r, err, "Failed to read a request body .", "") 848 reportTryError(w, r, err, "Failed to read a request body .", "")
859 return 849 return
860 } 850 }
861 if n == MAX_TRY_SIZE { 851 if n == MAX_TRY_SIZE {
862 err := fmt.Errorf("Code length equal to, or exceeded, %d ", MAX_TRY_SIZE) 852 err := fmt.Errorf("Code length equal to, or exceeded, %d ", MAX_TRY_SIZE)
863 reportTryError(w, r, err, "Code too large.", "") 853 reportTryError(w, r, err, "Code too large.", "")
864 return 854 return
865 } 855 }
866 request := TryRequest{} 856 request := TryRequest{}
867 if err := json.Unmarshal(buf.Bytes(), &request); err != nil { 857 if err := json.Unmarshal(buf.Bytes(), &request); err != nil {
868 reportTryError(w, r, err, "Coulnd't decode JSON.", "") 858 reportTryError(w, r, err, "Coulnd't decode JSON.", "")
869 return 859 return
870 } 860 }
871 if hasPreProcessor(request.Code) { 861 if hasPreProcessor(request.Code) {
872 err := fmt.Errorf("Found preprocessor macro in code.") 862 err := fmt.Errorf("Found preprocessor macro in code.")
873 reportTryError(w, r, err, "Preprocessor macros aren't al lowed.", "") 863 reportTryError(w, r, err, "Preprocessor macros aren't al lowed.", "")
874 return 864 return
875 } 865 }
876 » » hash, err := expandCode(LineNumbers(request.Code), request.Sourc e, request.Width, request.Height, request.GPU) 866 » » hash, err := expandCode(LineNumbers(request.Code), request.Sourc e, request.Width, request.Height)
877 if err != nil { 867 if err != nil {
878 reportTryError(w, r, err, "Failed to write the code to c ompile.", hash) 868 reportTryError(w, r, err, "Failed to write the code to c ompile.", hash)
879 return 869 return
880 } 870 }
881 » » writeToDatabase(hash, request.Code, request.Name, request.Source , request.Width, request.Height, request.GPU) 871 » » writeToDatabase(hash, request.Code, request.Name, request.Source , request.Width, request.Height)
882 err = expandGyp(hash) 872 err = expandGyp(hash)
883 if err != nil { 873 if err != nil {
884 reportTryError(w, r, err, "Failed to write the gyp file. ", hash) 874 reportTryError(w, r, err, "Failed to write the gyp file. ", hash)
885 return 875 return
886 } 876 }
887 cmd := fmt.Sprintf("scripts/fiddle_wrapper %s --width %d --heigh t %d", hash, request.Width, request.Height) 877 cmd := fmt.Sprintf("scripts/fiddle_wrapper %s --width %d --heigh t %d", hash, request.Width, request.Height)
888 if request.GPU { 878 if request.GPU {
889 cmd += " --gpu" 879 cmd += " --gpu"
890 } 880 }
891 if *useChroot { 881 if *useChroot {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 http.HandleFunc("/sources/", autogzip.HandleFunc(sourcesHandler)) 951 http.HandleFunc("/sources/", autogzip.HandleFunc(sourcesHandler))
962 952
963 // Resources are served directly 953 // Resources are served directly
964 // TODO add support for caching/etags/gzip 954 // TODO add support for caching/etags/gzip
965 http.Handle("/res/", autogzip.Handle(http.FileServer(http.Dir("./")))) 955 http.Handle("/res/", autogzip.Handle(http.FileServer(http.Dir("./"))))
966 956
967 // TODO Break out /c/ as it's own handler. 957 // TODO Break out /c/ as it's own handler.
968 http.HandleFunc("/", autogzip.HandleFunc(mainHandler)) 958 http.HandleFunc("/", autogzip.HandleFunc(mainHandler))
969 glog.Fatal(http.ListenAndServe(*port, nil)) 959 glog.Fatal(http.ListenAndServe(*port, nil))
970 } 960 }
OLDNEW
« no previous file with comments | « experimental/webtry/templates/sidebar.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698