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

Unified Diff: source/config/mac/ia32/vp9_rtcd.h

Issue 240113008: Disable avx2 in rtcd definitions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/config/linux/x64/vp9_rtcd.h ('k') | source/config/mac/x64/vp9_rtcd.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/config/mac/ia32/vp9_rtcd.h
===================================================================
--- source/config/mac/ia32/vp9_rtcd.h (revision 264025)
+++ source/config/mac/ia32/vp9_rtcd.h (working copy)
@@ -44,7 +44,6 @@
void vp9_convolve8_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
void vp9_convolve8_sse2(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
void vp9_convolve8_ssse3(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
-void vp9_convolve8_avx2(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
RTCD_EXTERN void (*vp9_convolve8)(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
void vp9_convolve8_avg_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
@@ -65,13 +64,11 @@
void vp9_convolve8_horiz_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
void vp9_convolve8_horiz_sse2(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
void vp9_convolve8_horiz_ssse3(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
-void vp9_convolve8_horiz_avx2(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
RTCD_EXTERN void (*vp9_convolve8_horiz)(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
void vp9_convolve8_vert_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
void vp9_convolve8_vert_sse2(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
void vp9_convolve8_vert_ssse3(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
-void vp9_convolve8_vert_avx2(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
RTCD_EXTERN void (*vp9_convolve8_vert)(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
void vp9_convolve_avg_c(const uint8_t *src, ptrdiff_t src_stride, uint8_t *dst, ptrdiff_t dst_stride, const int16_t *filter_x, int x_step_q4, const int16_t *filter_y, int y_step_q4, int w, int h);
@@ -206,42 +203,34 @@
void vp9_fdct16x16_c(const int16_t *input, int16_t *output, int stride);
void vp9_fdct16x16_sse2(const int16_t *input, int16_t *output, int stride);
-void vp9_fdct16x16_avx2(const int16_t *input, int16_t *output, int stride);
RTCD_EXTERN void (*vp9_fdct16x16)(const int16_t *input, int16_t *output, int stride);
void vp9_fdct32x32_c(const int16_t *input, int16_t *output, int stride);
void vp9_fdct32x32_sse2(const int16_t *input, int16_t *output, int stride);
-void vp9_fdct32x32_avx2(const int16_t *input, int16_t *output, int stride);
RTCD_EXTERN void (*vp9_fdct32x32)(const int16_t *input, int16_t *output, int stride);
void vp9_fdct32x32_rd_c(const int16_t *input, int16_t *output, int stride);
void vp9_fdct32x32_rd_sse2(const int16_t *input, int16_t *output, int stride);
-void vp9_fdct32x32_rd_avx2(const int16_t *input, int16_t *output, int stride);
RTCD_EXTERN void (*vp9_fdct32x32_rd)(const int16_t *input, int16_t *output, int stride);
void vp9_fdct4x4_c(const int16_t *input, int16_t *output, int stride);
void vp9_fdct4x4_sse2(const int16_t *input, int16_t *output, int stride);
-void vp9_fdct4x4_avx2(const int16_t *input, int16_t *output, int stride);
RTCD_EXTERN void (*vp9_fdct4x4)(const int16_t *input, int16_t *output, int stride);
void vp9_fdct8x8_c(const int16_t *input, int16_t *output, int stride);
void vp9_fdct8x8_sse2(const int16_t *input, int16_t *output, int stride);
-void vp9_fdct8x8_avx2(const int16_t *input, int16_t *output, int stride);
RTCD_EXTERN void (*vp9_fdct8x8)(const int16_t *input, int16_t *output, int stride);
void vp9_fht16x16_c(const int16_t *input, int16_t *output, int stride, int tx_type);
void vp9_fht16x16_sse2(const int16_t *input, int16_t *output, int stride, int tx_type);
-void vp9_fht16x16_avx2(const int16_t *input, int16_t *output, int stride, int tx_type);
RTCD_EXTERN void (*vp9_fht16x16)(const int16_t *input, int16_t *output, int stride, int tx_type);
void vp9_fht4x4_c(const int16_t *input, int16_t *output, int stride, int tx_type);
void vp9_fht4x4_sse2(const int16_t *input, int16_t *output, int stride, int tx_type);
-void vp9_fht4x4_avx2(const int16_t *input, int16_t *output, int stride, int tx_type);
RTCD_EXTERN void (*vp9_fht4x4)(const int16_t *input, int16_t *output, int stride, int tx_type);
void vp9_fht8x8_c(const int16_t *input, int16_t *output, int stride, int tx_type);
void vp9_fht8x8_sse2(const int16_t *input, int16_t *output, int stride, int tx_type);
-void vp9_fht8x8_avx2(const int16_t *input, int16_t *output, int stride, int tx_type);
RTCD_EXTERN void (*vp9_fht8x8)(const int16_t *input, int16_t *output, int stride, int tx_type);
int vp9_full_range_search_c(const struct macroblock *x, struct mv *ref_mv, struct mv *best_mv, int search_param, int sad_per_bit, int *num00, const struct vp9_variance_vtable *fn_ptr, DEC_MVCOSTS, const struct mv *center_mv);
@@ -340,7 +329,6 @@
void vp9_lpf_horizontal_16_c(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh, int count);
void vp9_lpf_horizontal_16_sse2(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh, int count);
-void vp9_lpf_horizontal_16_avx2(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh, int count);
RTCD_EXTERN void (*vp9_lpf_horizontal_16)(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh, int count);
void vp9_lpf_horizontal_4_c(uint8_t *s, int pitch, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh, int count);
@@ -475,7 +463,6 @@
void vp9_sad32x32x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t* const ref_ptr[], int ref_stride, unsigned int *sad_array);
void vp9_sad32x32x4d_sse2(const uint8_t *src_ptr, int src_stride, const uint8_t* const ref_ptr[], int ref_stride, unsigned int *sad_array);
-void vp9_sad32x32x4d_avx2(const uint8_t *src_ptr, int src_stride, const uint8_t* const ref_ptr[], int ref_stride, unsigned int *sad_array);
RTCD_EXTERN void (*vp9_sad32x32x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t* const ref_ptr[], int ref_stride, unsigned int *sad_array);
void vp9_sad32x32x8_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, uint32_t *sad_array);
@@ -543,7 +530,6 @@
void vp9_sad64x64x4d_c(const uint8_t *src_ptr, int src_stride, const uint8_t* const ref_ptr[], int ref_stride, unsigned int *sad_array);
void vp9_sad64x64x4d_sse2(const uint8_t *src_ptr, int src_stride, const uint8_t* const ref_ptr[], int ref_stride, unsigned int *sad_array);
-void vp9_sad64x64x4d_avx2(const uint8_t *src_ptr, int src_stride, const uint8_t* const ref_ptr[], int ref_stride, unsigned int *sad_array);
RTCD_EXTERN void (*vp9_sad64x64x4d)(const uint8_t *src_ptr, int src_stride, const uint8_t* const ref_ptr[], int ref_stride, unsigned int *sad_array);
void vp9_sad64x64x8_c(const uint8_t *src_ptr, int src_stride, const uint8_t *ref_ptr, int ref_stride, uint32_t *sad_array);
@@ -611,8 +597,7 @@
#define vp9_sub_pixel_avg_variance32x16 vp9_sub_pixel_avg_variance32x16_c
unsigned int vp9_sub_pixel_avg_variance32x32_c(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, const uint8_t *second_pred);
-unsigned int vp9_sub_pixel_avg_variance32x32_avx2(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, const uint8_t *second_pred);
-RTCD_EXTERN unsigned int (*vp9_sub_pixel_avg_variance32x32)(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, const uint8_t *second_pred);
+#define vp9_sub_pixel_avg_variance32x32 vp9_sub_pixel_avg_variance32x32_c
unsigned int vp9_sub_pixel_avg_variance32x64_c(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, const uint8_t *second_pred);
#define vp9_sub_pixel_avg_variance32x64 vp9_sub_pixel_avg_variance32x64_c
@@ -627,8 +612,7 @@
#define vp9_sub_pixel_avg_variance64x32 vp9_sub_pixel_avg_variance64x32_c
unsigned int vp9_sub_pixel_avg_variance64x64_c(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, const uint8_t *second_pred);
-unsigned int vp9_sub_pixel_avg_variance64x64_avx2(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, const uint8_t *second_pred);
-RTCD_EXTERN unsigned int (*vp9_sub_pixel_avg_variance64x64)(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, const uint8_t *second_pred);
+#define vp9_sub_pixel_avg_variance64x64 vp9_sub_pixel_avg_variance64x64_c
unsigned int vp9_sub_pixel_avg_variance8x16_c(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, const uint8_t *second_pred);
#define vp9_sub_pixel_avg_variance8x16 vp9_sub_pixel_avg_variance8x16_c
@@ -658,8 +642,7 @@
#define vp9_sub_pixel_variance32x16 vp9_sub_pixel_variance32x16_c
unsigned int vp9_sub_pixel_variance32x32_c(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
-unsigned int vp9_sub_pixel_variance32x32_avx2(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
-RTCD_EXTERN unsigned int (*vp9_sub_pixel_variance32x32)(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+#define vp9_sub_pixel_variance32x32 vp9_sub_pixel_variance32x32_c
unsigned int vp9_sub_pixel_variance32x64_c(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
#define vp9_sub_pixel_variance32x64 vp9_sub_pixel_variance32x64_c
@@ -674,8 +657,7 @@
#define vp9_sub_pixel_variance64x32 vp9_sub_pixel_variance64x32_c
unsigned int vp9_sub_pixel_variance64x64_c(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
-unsigned int vp9_sub_pixel_variance64x64_avx2(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
-RTCD_EXTERN unsigned int (*vp9_sub_pixel_variance64x64)(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
+#define vp9_sub_pixel_variance64x64 vp9_sub_pixel_variance64x64_c
unsigned int vp9_sub_pixel_variance8x16_c(const uint8_t *src_ptr, int source_stride, int xoffset, int yoffset, const uint8_t *ref_ptr, int ref_stride, unsigned int *sse);
#define vp9_sub_pixel_variance8x16 vp9_sub_pixel_variance8x16_c
@@ -801,7 +783,6 @@
vp9_convolve8 = vp9_convolve8_c;
if (flags & HAS_SSE2) vp9_convolve8 = vp9_convolve8_sse2;
if (flags & HAS_SSSE3) vp9_convolve8 = vp9_convolve8_ssse3;
- if (flags & HAS_AVX2) vp9_convolve8 = vp9_convolve8_avx2;
vp9_convolve8_avg = vp9_convolve8_avg_c;
if (flags & HAS_SSE2) vp9_convolve8_avg = vp9_convolve8_avg_sse2;
if (flags & HAS_SSSE3) vp9_convolve8_avg = vp9_convolve8_avg_ssse3;
@@ -814,37 +795,27 @@
vp9_convolve8_horiz = vp9_convolve8_horiz_c;
if (flags & HAS_SSE2) vp9_convolve8_horiz = vp9_convolve8_horiz_sse2;
if (flags & HAS_SSSE3) vp9_convolve8_horiz = vp9_convolve8_horiz_ssse3;
- if (flags & HAS_AVX2) vp9_convolve8_horiz = vp9_convolve8_horiz_avx2;
vp9_convolve8_vert = vp9_convolve8_vert_c;
if (flags & HAS_SSE2) vp9_convolve8_vert = vp9_convolve8_vert_sse2;
if (flags & HAS_SSSE3) vp9_convolve8_vert = vp9_convolve8_vert_ssse3;
- if (flags & HAS_AVX2) vp9_convolve8_vert = vp9_convolve8_vert_avx2;
vp9_diamond_search_sad = vp9_diamond_search_sad_c;
if (flags & HAS_SSE3) vp9_diamond_search_sad = vp9_diamond_search_sadx4;
vp9_fdct16x16 = vp9_fdct16x16_c;
if (flags & HAS_SSE2) vp9_fdct16x16 = vp9_fdct16x16_sse2;
- if (flags & HAS_AVX2) vp9_fdct16x16 = vp9_fdct16x16_avx2;
vp9_fdct32x32 = vp9_fdct32x32_c;
if (flags & HAS_SSE2) vp9_fdct32x32 = vp9_fdct32x32_sse2;
- if (flags & HAS_AVX2) vp9_fdct32x32 = vp9_fdct32x32_avx2;
vp9_fdct32x32_rd = vp9_fdct32x32_rd_c;
if (flags & HAS_SSE2) vp9_fdct32x32_rd = vp9_fdct32x32_rd_sse2;
- if (flags & HAS_AVX2) vp9_fdct32x32_rd = vp9_fdct32x32_rd_avx2;
vp9_fdct4x4 = vp9_fdct4x4_c;
if (flags & HAS_SSE2) vp9_fdct4x4 = vp9_fdct4x4_sse2;
- if (flags & HAS_AVX2) vp9_fdct4x4 = vp9_fdct4x4_avx2;
vp9_fdct8x8 = vp9_fdct8x8_c;
if (flags & HAS_SSE2) vp9_fdct8x8 = vp9_fdct8x8_sse2;
- if (flags & HAS_AVX2) vp9_fdct8x8 = vp9_fdct8x8_avx2;
vp9_fht16x16 = vp9_fht16x16_c;
if (flags & HAS_SSE2) vp9_fht16x16 = vp9_fht16x16_sse2;
- if (flags & HAS_AVX2) vp9_fht16x16 = vp9_fht16x16_avx2;
vp9_fht4x4 = vp9_fht4x4_c;
if (flags & HAS_SSE2) vp9_fht4x4 = vp9_fht4x4_sse2;
- if (flags & HAS_AVX2) vp9_fht4x4 = vp9_fht4x4_avx2;
vp9_fht8x8 = vp9_fht8x8_c;
if (flags & HAS_SSE2) vp9_fht8x8 = vp9_fht8x8_sse2;
- if (flags & HAS_AVX2) vp9_fht8x8 = vp9_fht8x8_avx2;
vp9_full_search_sad = vp9_full_search_sad_c;
if (flags & HAS_SSE3) vp9_full_search_sad = vp9_full_search_sadx3;
if (flags & HAS_SSE4_1) vp9_full_search_sad = vp9_full_search_sadx8;
@@ -883,7 +854,6 @@
if (flags & HAS_SSE2) vp9_iht8x8_64_add = vp9_iht8x8_64_add_sse2;
vp9_lpf_horizontal_16 = vp9_lpf_horizontal_16_c;
if (flags & HAS_SSE2) vp9_lpf_horizontal_16 = vp9_lpf_horizontal_16_sse2;
- if (flags & HAS_AVX2) vp9_lpf_horizontal_16 = vp9_lpf_horizontal_16_avx2;
vp9_lpf_horizontal_4 = vp9_lpf_horizontal_4_c;
if (flags & HAS_MMX) vp9_lpf_horizontal_4 = vp9_lpf_horizontal_4_mmx;
vp9_lpf_horizontal_4_dual = vp9_lpf_horizontal_4_dual_c;
@@ -928,7 +898,6 @@
if (flags & HAS_SSE2) vp9_sad32x16x4d = vp9_sad32x16x4d_sse2;
vp9_sad32x32x4d = vp9_sad32x32x4d_c;
if (flags & HAS_SSE2) vp9_sad32x32x4d = vp9_sad32x32x4d_sse2;
- if (flags & HAS_AVX2) vp9_sad32x32x4d = vp9_sad32x32x4d_avx2;
vp9_sad32x64x4d = vp9_sad32x64x4d_c;
if (flags & HAS_SSE2) vp9_sad32x64x4d = vp9_sad32x64x4d_sse2;
vp9_sad4x4 = vp9_sad4x4_c;
@@ -943,7 +912,6 @@
if (flags & HAS_SSE2) vp9_sad64x32x4d = vp9_sad64x32x4d_sse2;
vp9_sad64x64x4d = vp9_sad64x64x4d_c;
if (flags & HAS_SSE2) vp9_sad64x64x4d = vp9_sad64x64x4d_sse2;
- if (flags & HAS_AVX2) vp9_sad64x64x4d = vp9_sad64x64x4d_avx2;
vp9_sad8x16 = vp9_sad8x16_c;
if (flags & HAS_MMX) vp9_sad8x16 = vp9_sad8x16_mmx;
vp9_sad8x16x3 = vp9_sad8x16x3_c;
@@ -958,14 +926,6 @@
if (flags & HAS_SSE3) vp9_sad8x8x3 = vp9_sad8x8x3_sse3;
vp9_sad8x8x4d = vp9_sad8x8x4d_c;
if (flags & HAS_SSE2) vp9_sad8x8x4d = vp9_sad8x8x4d_sse2;
- vp9_sub_pixel_avg_variance32x32 = vp9_sub_pixel_avg_variance32x32_c;
- if (flags & HAS_AVX2) vp9_sub_pixel_avg_variance32x32 = vp9_sub_pixel_avg_variance32x32_avx2;
- vp9_sub_pixel_avg_variance64x64 = vp9_sub_pixel_avg_variance64x64_c;
- if (flags & HAS_AVX2) vp9_sub_pixel_avg_variance64x64 = vp9_sub_pixel_avg_variance64x64_avx2;
- vp9_sub_pixel_variance32x32 = vp9_sub_pixel_variance32x32_c;
- if (flags & HAS_AVX2) vp9_sub_pixel_variance32x32 = vp9_sub_pixel_variance32x32_avx2;
- vp9_sub_pixel_variance64x64 = vp9_sub_pixel_variance64x64_c;
- if (flags & HAS_AVX2) vp9_sub_pixel_variance64x64 = vp9_sub_pixel_variance64x64_avx2;
vp9_temporal_filter_apply = vp9_temporal_filter_apply_c;
if (flags & HAS_SSE2) vp9_temporal_filter_apply = vp9_temporal_filter_apply_sse2;
vp9_variance16x16 = vp9_variance16x16_c;
« no previous file with comments | « source/config/linux/x64/vp9_rtcd.h ('k') | source/config/mac/x64/vp9_rtcd.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698